これは疑似コードです
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);//ここで送信可能なデータが抽出されます
}
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を参照してください。