首页 > 编程语言 >013 Rust 异步编程,Send trait 相关

013 Rust 异步编程,Send trait 相关

时间:2022-11-07 11:40:42浏览次数:36  
标签:trait await Send 013 NotSend async foo fn


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());
}
  • 说明

上述代码并不会报错。但是,如果我们将代码foo函数修改为如下:

async fn foo() {
let x = NotSend::default();
bar().await;
}
  • 原因分析

如果我们存储了x变量,那么在await之前,x可能并不会drop,那么也就意味着可能会在线程之间传递。而Rc是不能在线程之间传递的。

  • 解决方式
async fn foo() {
{
let x = NotSend::default();
}
bar().await;
}


标签:trait,await,Send,013,NotSend,async,foo,fn
From: https://blog.51cto.com/u_15862521/5828335

相关文章

  • postman发送post请求给本地express 一直sending request
    //catch404andforwardtoerrorhandlerapp.use(function(req,res,next){next(createError(404));});//统一处理错误//之前的所有路由中调用next(err),......
  • USBD_CUSTOM_HID_SendReport 发送报文
    data_buff[0]=0x01;data_buff[1]=0x00;data_buff[2]=0x00;//USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS,data_buff,CUSTOM_HID_EP......
  • 2022-2023-1 20201324《信息安全系统设计与实现(上)》第12章
    1块设备I/O缓冲区文件系统使用一系列I/O缓冲区作为块设备的缓存内存。当进程试图读取(dev,blk)标识的磁盘块时,它首先在缓冲区缓存中搜索分配给磁盘块的缓冲区。如果该缓......
  • 013.Mybatis数据插入操作
    1.Mybatis数据写操作操作  2.步骤2.1在good.xml中添加SQL语句<insertid="insert"parameterType="com.imooc.mybatis.entity.Goods">INSERTINTOt......
  • C++调用HTTP(HttpSendRequest)如何设置延时
    1、解决办法:DWORDdwTimeout=3000;//3s bRet=InternetSetOption(hRequest,INTERNET_OPTION_CONNECT_TIMEOUT,&dwTimeout,sizeof(dwTimeout)); if(!bRet){......
  • 20201318李兴昕第十二章学习笔记
    第十二章:块设备I/O和缓冲区管理知识点归纳总结:本章讨论了块设备I/O和缓冲区管理;解释了块设备I/O的原理和I/O缓冲的优点;论述了Unix的缓冲区管理算法,并指出了其不足之......
  • 20201302姬正坤第十二章学习笔记
    Linux第十二章——块设备I/O和缓冲区管理块设备I/O缓冲区读写普通文件的算法依赖于两个关键操作,即:get_block和put_block,这两个操作将磁盘块读写到内存缓冲区中。I/O缓......
  • ubuntu安装使用sendmail
    背景:ubuntu中安装sendmail发送邮件;1.环境配置sudoaptinstallsendmailsudoaptinstallsendmail-cfsudoapt-getinstallmailutils2.检查是否安装成功:psa......
  • 20201317 LYX 第12章 块设备I/O和缓冲区管理
    第12章块设备I/O和缓冲区管理知识总结解释块设备I/O的原理和I/O缓冲的优点介绍Unix的缓冲区管理算法利用信号量设计新的缓冲区管理算法,以提高I/O缓冲区的缓存效率和......
  • AGC013E
    模型转化题,转化不出来就白给。可以把题目的条件翻译成以下组合语言:有一排\(n\)个格子,你要在其中插入若干个隔板将其隔成若干段有\(m\)个特殊格子\(a_1,a_2,\dots,......