これは擬似コードです
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
の前にa
を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を参照してください