BuringStraw

BuringStraw

Rustでasync関数を呼び出す際に変数をスレッド間で安全に渡せないエラー

これは擬似コードです

async fn a() {
    let a:T = ...;//TはSendを実装していない型
    let b = foo(a);
    boo(b).await;
}

async fn boo() -> i32 {
    ...
}

この場合、future cannot be sent between threads safelyというエラーが発生します。
解決策は、awaitの前にadropすることです

async fn a() {
    let b;
    {
        let a:T = ...;//TはSendを実装していない型
        b = foo(a);//ここでSend可能なデータを抽出します
    }
    boo(b).await;
}

ただし、手動でdropすることはできません

async fn a() {
    let a:T = ...;//TはSendを実装していない型
    let b = foo(a);//ここでSend可能なデータを抽出します
    drop(a);//コンパイラは認識しません
    boo(b).await;
}

さらに詳しい説明はhttps://blog.csdn.net/wangjun861205/article/details/118084436を参照してください

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。