網站首頁 編程語言 正文
以下文章來源于公眾號DotNetCore實戰?
Igor Bendrup:
關于如何獲取 Thread
中的返回值,不同的版本有不同的解決方案。
一、.NET 2.0+
你可以直接使用 Thread
對象,然后你可以使用閉包(聲明變量并在 lambda
中捕獲它),參考如下代碼:
object result = null; Thread thread = new System.Threading.Thread(() => {? ? ? //Some work... ? ? result = 42; }); thread.Start(); thread.Join(); Console.WriteLine(result);
也可以使用 IAsyncResult
然后在EndInvoke()
方法中獲取返回值。
BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += (s, e) => { ? ? //Some work... ? ? e.Result = 42; }; worker.RunWorkerCompleted += (s, e) => { ? ? //e.Result "returned" from thread ? ? Console.WriteLine(e.Result); }; worker.RunWorkerAsync();
BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += (s, e) => { ? ? //Some work... ? ? e.Result = 42; }; worker.RunWorkerCompleted += (s, e) => { ? ? //e.Result "returned" from thread ? ? Console.WriteLine(e.Result); }; worker.RunWorkerAsync();
還可以使用傳統的 BackgroundWorker
,然后在 RunWorkerCompleted
?事件中捕獲。
二、.NET 4.0 +
從 .NET 4.0 開始,你可以通過 Task
的方式開啟 Thread
,如果想獲取返回值可以提取 Task
中的 Result
如下代碼:
//Main thread will be blocked until task thread finishes //(because of obtaining the value of the Result property) int result = Task.Factory.StartNew(() => { ? ? //Some work... ? ? return 42;}).Result;
三、.NET 4.5 +
從 .NET 4.5 開始, 你可以使用 await
,async
的方式替代 Task
的 Result
屬性,參考如下代碼:
int result = await Task.Run(() => { ? ? //Some work... ? ? return 42; });
建議:用 Task 來替代傳統 Thread 所做的事情。
相關推薦
- 2022-01-03 yarn版本過低導致的報錯
- 2022-07-29 C++超詳細講解數組操作符的重載_C 語言
- 2022-03-14 surface屏幕自動調節亮度無法關閉
- 2022-11-22 Kotlin對象的懶加載方式by?lazy?與?lateinit?異同詳解_Android
- 2022-05-06 Python實現提取Excel指定關鍵詞的行數據_python
- 2022-06-19 docker容器非root用戶提權的問題解決_docker
- 2022-07-12 修改docker官方鏡像內部內容并重新build鏡像
- 2022-05-25 excel動態生成Sql語句
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支