成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何解決“Future不能安全地在線程之間發送”的問題?

開發 前端
當在Tokio運行的異步函數中使用Actix client時,可能會發生“error: future不能安全地在線程之間發送”的錯誤,這在使用Tokio和Actix庫時是一個常見的問題。今天,我們來看看如何解決這個問題。

Rust應用程序通常使用異步庫,如Tokio和Actix。這些庫為異步I/O和并行計算等提供了有力的支持。然而,不同的異步庫在一起使用時,有時會出現問題。

當在Tokio運行的異步函數中使用Actix client時,可能會發生“error: future不能安全地在線程之間發送”的錯誤,這在使用Tokio和Actix庫時是一個常見的問題。今天,我們來看看如何解決這個問題。

讓我們從一個簡單的代碼示例開始,它只適用于Actix,不會產生任何問題:

use actix_web::{web, App, HttpResponse, HttpServer};
use awc::Client;

#[actix_rt::main]
async fn main()  {
    actix_rt::spawn(async {
        HttpServer::new(|| {
            App::new()
                .service(web::resource("/hello").route(web::get().to(ok)))
        })
            .bind("127.0.0.1:8080")?
            .run()
            .await
    });

    let client = Client::new();
    let url = "http://127.0.0.1:8080/hello";
    let ret =  client.get(url).send().await.unwrap().body().await.unwrap();
    println!("{:?}", ret);
}

async fn ok() -> HttpResponse {
    HttpResponse::Ok()
        .content_type("text/html; charset=utf-8")
        .body("OK")
}


在這段代碼中,我們使用Actix創建一個HTTP服務器,并使用Actix client向它發出GET請求。一切都很順利,但是當我們試圖在Tokio運行的異步函數中使用Actix client時,問題就開始了。

當我們嘗試在Tokio運行時中調用Actix client時,我們會遇到“error: future不能安全地在線程之間發送的錯誤。async block創建的future不是Send。類型 awc::Client 不是Send”。這是因為Actix client不是Send,這意味著它不能在線程之間安全地傳遞。

下面是導致此錯誤的示例代碼:

use actix_web::{web, App, HttpResponse, HttpServer};
use awc::Client;

#[actix_rt::main]
async fn main()  {
    actix_rt::spawn(async {
        HttpServer::new(|| {
            App::new()
                .service(web::resource("/hello").route(web::get().to(ok)))
        })
            .bind("127.0.0.1:8080")?
            .run()
            .await
    });

    let r = tokio::spawn(async move {
        let client = Client::new();
        let url = "http://127.0.0.1:8080/hello";
        client.get(url).send().await.unwrap().body().await.unwrap()
    }).await.unwrap();

    println!("{:?}", r);
}

async fn ok() -> HttpResponse {
    HttpResponse::Ok()
        .content_type("text/html; charset=utf-8")
        .body("OK")
}


為了解決這個問題并使代碼在Tokio中安全使用,我們可以使用來自Tokio的Oneshot機制。這種機制允許我們封裝Actix client的輸出,并在線程之間安全地傳遞它。

下面是用Oneshot用來解決這個問題的示例代碼:

use actix_web::{web, App, HttpResponse, HttpServer};
use awc::Client;

#[actix_rt::main]
async fn main()  {
    actix_rt::spawn(async {
        HttpServer::new(|| {
            App::new()
                .service(web::resource("/hello").route(web::get().to(ok)))
        })
            .bind("127.0.0.1:8080")?
            .run()
            .await
    });

      let (sender, receiver) = tokio::sync::oneshot::channel();

    actix_rt::spawn(async move {
        let client = Client::new();
        let url = "http://127.0.0.1:8080/hello";
        let _ = sender.send(client.get(url).send().await.unwrap().body().await.unwrap());
    });

    let r = tokio::spawn(async move {
        receiver.await.unwrap()
    }).await.unwrap();

    println!("{:?}", r);
    std::mem::forget(runtime);
}

async fn ok() -> HttpResponse {
    HttpResponse::Ok()
        .content_type("text/html; charset=utf-8")
        .body("OK")
}
責任編輯:武曉燕 來源: coding到燈火闌珊
相關推薦

2016-05-11 14:16:20

2018-03-21 07:08:40

2022-10-12 15:15:56

數字孿生物聯網

2014-06-06 14:33:29

BYOD移動安全

2022-07-04 10:11:33

云安全混合云云計算

2024-03-14 11:22:54

2019-12-13 11:30:33

云計算IT安全

2024-01-10 17:27:00

Python開發

2021-09-14 09:00:00

私有云安全云架構

2019-06-17 08:00:55

multipassbash腳本

2011-08-29 10:34:00

網絡安全云安全云計算

2024-01-22 16:38:00

AI人工智能GenAI

2023-10-11 17:38:43

Linux磁盤數據

2011-05-06 15:56:38

打印機故障

2013-12-30 10:43:15

云計算移動數據云安全

2009-07-22 13:32:24

JDBC SQL

2020-06-29 15:03:34

遠程工作網絡安全網絡攻擊

2011-09-05 13:32:56

2023-04-01 10:32:36

2019-04-11 08:00:00

Windows刪除文件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: va精品| 韩国毛片一区二区三区 | 一区二区久久 | 国产一区二区免费在线 | 欧美大片一区 | 久久久久国产 | 九一视频在线播放 | 国产成人精品久久 | 毛片视频观看 | 久久9久| 一区二区视频在线 | 中文字幕一区二区不卡 | www.一区二区三区.com | 91久久国产综合久久91精品网站 | 精品欧美一区二区三区久久久 | 亚洲综合色视频在线观看 | 国产精品久久久乱弄 | 亚洲精品无 | 欧美国产亚洲一区二区 | 国产成人精品在线播放 | 亚洲精品久久久一区二区三区 | 久久69精品久久久久久国产越南 | 暖暖日本在线视频 | 超碰97在线免费 | 亚洲精品一区二区 | 婷婷色在线 | 一区二区在线 | 国产网站在线播放 | 精品在线一区 | 亚洲视频在线播放 | 久久久久久国产精品 | 欧美日韩在线视频一区二区 | 美国黄色毛片 | 日韩欧美国产一区二区三区 | 国产亚洲精品久久久久动 | 天天干成人网 | 国产欧美日韩精品一区二区三区 | 狠狠操狠狠操 | 国产精品亚洲一区二区三区在线观看 | 日韩在线观看一区 | 欧美老少妇一级特黄一片 |