介绍:
在开发过程中,我们可能会遇到错误消息: “error: future cannot be sent between threads safely”。这个错误通常是由于使用了不可发送(not Send)的类型引起的,尤其是 std::sync::MutexGuard 类型。这意味着我们不能将一个互斥锁(mutex)在不同线程间进行传递,而 Tokio 运行时又允许任务在每个 .await 点之间在不同线程间移动。因此,我们需要重新组织代码以确保互斥锁的析构函数在 .await 之前运行,以避免出现此错误。
还有另外一种方案是使用 tokio::task::LocalSet。通过使用 LocalSet,你可以确保异步任务只在单个线程上运行,而不需要实现 Send。这对于需要任务始终在同一线程上访问特定资源的情况非常有用。
范例一:
下面我们提供了一个范例来说明可以解决该问题的正确代码和错误代码。
正确代码:
use std::sync::{
Mutex, MutexGuard};
async fn ictester_main(mutex: &Mutex<i32>) {

本文介绍了如何处理开发中的error:futurecannotbesentbetweenthreadssafely错误,重点在于正确使用MutexGuard、确保互斥锁在await之前释放,以及利用tokio::task::LocalSet来限制异步任务的线程范围,以提高线程安全和代码正确性。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



