這是一段偽代碼
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
的錯誤。
解決方法是,保證a
在await
之前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