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

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

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

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

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

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

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創(chuàng)建一個HTTP服務(wù)器,并使用Actix client向它發(fā)出GET請求。一切都很順利,但是當(dāng)我們試圖在Tokio運(yùn)行的異步函數(shù)中使用Actix client時,問題就開始了。

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

下面是導(dǎo)致此錯誤的示例代碼:

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機(jī)制。這種機(jī)制允許我們封裝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")
}
責(zé)任編輯:武曉燕 來源: coding到燈火闌珊
相關(guān)推薦

2018-03-21 07:08:40

2022-10-12 15:15:56

數(shù)字孿生物聯(lián)網(wǎng)

2016-05-11 14:16:20

2014-06-06 14:33:29

BYOD移動安全

2024-03-14 11:22:54

2022-07-04 10:11:33

云安全混合云云計算

2019-12-13 11:30:33

云計算IT安全

2021-09-14 09:00:00

私有云安全云架構(gòu)

2019-06-17 08:00:55

multipassbash腳本

2024-01-10 17:27:00

Python開發(fā)

2011-08-29 10:34:00

網(wǎng)絡(luò)安全云安全云計算

2024-01-22 16:38:00

AI人工智能GenAI

2013-12-30 10:43:15

云計算移動數(shù)據(jù)云安全

2011-09-05 13:32:56

2023-10-11 17:38:43

Linux磁盤數(shù)據(jù)

2011-05-06 15:56:38

打印機(jī)故障

2009-07-22 13:32:24

JDBC SQL

2020-06-29 15:03:34

遠(yuǎn)程工作網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2009-12-02 13:30:30

2014-08-13 19:00:22

安全技術(shù)安全人才短缺
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 玖玖在线精品 | 国产91视频一区二区 | 欧美色综合 | 日韩播放 | 国产精品有限公司 | 久久久久久亚洲精品不卡 | 91精品久久久 | 色天天综合 | 日韩一二区在线 | 一区二区三区国产精品 | 在线成人| 成人国产精品久久 | av色站 | 在线91 | 国产一级电影在线 | 国产一区二区在线看 | 中文字幕国产一区 | 国产成人av在线播放 | 成人性视频免费网站 | 一级欧美一级日韩片 | 久久久久久综合 | 亚洲一区二区视频在线观看 | 欧美日韩亚洲一区 | 国产精品一区二区三区在线 | 成人性视频免费网站 | 大学生a级毛片免费视频 | 天天看天天摸天天操 | 一区二区三区在线免费 | 久久精品国产99国产精品亚洲 | 国产伦一区二区三区视频 | 久久av在线播放 | 毛片一区二区三区 | 欧美极品在线观看 | 久久国产精品视频 | 日韩久久综合 | 久久精品一 | 欧美影院久久 | 超碰免费在线观看 | 欧美最猛黑人xxxx黑人 | 在线亚洲欧美 | 又黄又爽的网站 |