AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2024-06-27 07:54:06 136觀看
導讀Rust應用程序通常使用異步庫,如Tokio和Actix。這些庫為異步I/O和并行計算等提供了有力的支持。然而,不同的異步庫在一起使用時,有時會出現問題。當在Tokio運行的異步函數中使用Actix client時,可能會發生“error: future

Rust應用程序通常使用異步庫,如Tokio和Actix。這些庫為異步I/O和并行計算等提供了有力的支持。然而,不同的異步庫在一起使用時,有時會出現問題。iWZ28資訊網——每日最新資訊28at.com

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

讓我們從一個簡單的代碼示例開始,它只適用于Actix,不會產生任何問題:iWZ28資訊網——每日最新資訊28at.com

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")}


iWZ28資訊網——每日最新資訊28at.com

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

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

下面是導致此錯誤的示例代碼:iWZ28資訊網——每日最新資訊28at.com

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")}


iWZ28資訊網——每日最新資訊28at.com

為了解決這個問題并使代碼在Tokio中安全使用,我們可以使用來自Tokio的Oneshot機制。這種機制允許我們封裝Actix client的輸出,并在線程之間安全地傳遞它。iWZ28資訊網——每日最新資訊28at.com

下面是用Oneshot用來解決這個問題的示例代碼:iWZ28資訊網——每日最新資訊28at.com

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")}

本文鏈接:http://www.tebozhan.com/showinfo-26-96748-0.html如何解決“Future不能安全地在線程之間發送”的問題?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 12306火車購票系統登錄驗證碼的智能校驗機制

下一篇: 轉轉游戲MQ重構:思考與心得之旅

標簽:
  • 熱門焦點
  • Redmi Buds 4開箱簡評:才199還有降噪 可以無腦入

    在上個月舉辦的Redmi Note11T Pro系列新機發布會上,除了兩款手機新品之外,Redmi還帶來了兩款TWS真無線藍牙耳機產品,Redmi Buds 4和Redmi Buds 4 Pro,此前我們在Redmi Note11T
  • 掘力計劃第 20 期:Flutter 混合開發的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發實戰詳解》作者,掘金優秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發的混亂之治。Flutter 基于自研的 Skia 引擎
  • 如何使用JavaScript創建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經瀏覽過購物網站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區域,以便瀏覽。結合這個小小的重要功能可以大大改善您網站的用戶體驗
  • 微軟邀請 Microsoft 365 商業用戶,測試視頻編輯器 Clipchamp

    8 月 1 日消息,微軟近日宣布即將面向 Microsoft 365 商業用戶,開放 Clipchamp 應用,邀請用戶通過該應用來編輯視頻。微軟于 2021 年收購 Clipchamp,隨后開始逐步整合到 Microsof
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己“當家”的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼‍‍‍‍‍‍‍‍‍‍東方甄選創始人俞敏洪帶隊的“7天甘肅行”直播活動已在近日順利收官。成立后一
  • 2納米決戰2025

    集微網報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領先地位的英特爾,甚至初成立不久的新
  • 國行版三星Galaxy Z Fold5/Z Flip5發布 售價7499元起

    2023年8月3日,三星電子舉行Galaxy新品中國發布會,正式在國內推出了新一代折疊屏智能手機三星Galaxy Z Fold5與Galaxy Z Flip5,以及三星Galaxy Tab S9
  • 外交部:美方應停止在網絡安全問題上不負責任地指責他國

      中國外交部今天(16日)舉行例行記者會。會上,有記者問,美國情報官員稱,他們正在阻攔來自中國以及其他國家的黑客獲取相關科研成果。 中方對此有何評論?對此
Top