首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从tokio::test生成tokio中的任务

从tokio::test生成tokio中的任务
EN

Stack Overflow用户
提问于 2021-04-10 23:15:59
回答 1查看 662关注 0票数 1

我有大致如下的tokio::main

代码语言:javascript
复制
#[tokio::main]
pub async fn my_tokio_main() {
    let addr = "[::1]:9002";
    let listener = TcpListener::bind(&addr).await.expect("Can't listen");

    while let Ok((stream, _)) = listener.accept().await {
        // Handle the connection
    }
}

使用大致如下的测试:

代码语言:javascript
复制
#[tokio::test]
async fn test_hello() {
    task::spawn(my_tokio_main());
//              ^^^^^^^^^^^^^^^ `()` is not a future

}

但是,在构建测试时,编译器会抱怨()不是未来。

我的理解是,因为my_tokio_main()async,所以它确实返回了未来。为什么编译器在这里抱怨呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-10 23:19:48

#[tokio::main]函数上有main属性。该属性将将函数转换为同步函数,该函数创建tokio运行时,并将调用runtime.block_on(future),其中future是定义的异步函数的结果。

因此,实际生成的my_tokio_main是同步的。您可以分离tokio::main包装器和async函数定义,以便从另一个异步函数调用异步函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67040116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档