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);//這裡提取的是可以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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。