天天看點

013 Rust 異步程式設計,Send trait 相關

async fn Future是否為Send的取決于是否在.await點上保留非Send類型。編譯器盡其所能地估計值在.await點上的儲存時間。

示例

  • 源碼
use std::rc::Rc;

#[derive(Default)]
struct NotSend(Rc<()>);

async fn bar() {}

async fn foo() {
  NotSend::default();
  bar().await;
}

fn required_send(_: impl Send) {}

fn main() {
  required_send(foo());
}      
  • 說明
async fn foo() {
  let x = NotSend::default();
  bar().await;
}      
  • 原因分析
  • 解決方式
async fn foo() {
    {
        let x = NotSend::default();
    }
    bar().await;
}      

繼續閱讀