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というエラーが発生します。
解決策は、aawaitの前にdropされることを保証することです

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

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

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

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

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