.NET提取?Thread?中返回值詳情
以下文章來源于公眾號DotNetCore實戰(zhàn)
Igor Bendrup:
關(guān)于如何獲取 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();還可以使用傳統(tǒng)的 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 來替代傳統(tǒng) Thread 所做的事情。
到此這篇關(guān)于.NET提取 Thread 中返回值詳情的文章就介紹到這了,更多相關(guān).NET提取 Thread 中返回值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET?Core使用功能開關(guān)控制路由訪問操作
這篇文章主要介紹了ASP.NET?Core使用功能開關(guān)控制路由訪問操作,而對于一些試驗性的功能,我們并不希望用密碼去控制是否允許訪問,而是想用一種開關(guān)的方式開放,下面文章我們就來試著實現(xiàn)這個功能,需要的小伙伴可以參考一下2022-02-02
使用Asp.net Mvc3 Razor視圖方式擴展JQuery UI Widgets方法介紹
jquery easyui grid或者extjs grid,jtable的代碼非常簡潔、對于grid功能要求不是很復(fù)雜的情況下,強烈推薦大家使用2012-11-11
ASP.NET?Core使用功能開關(guān)控制路由訪問操作(續(xù))
這篇文章主要介紹了ASP.NET?Core使用功能開關(guān)控制路由訪問操作的(續(xù)),上一篇文章我們已經(jīng)介紹過一部份該相關(guān)內(nèi)容,??在本文,我們可以判斷當(dāng)前路由地址是否為調(diào)試地址,讓評估返回真,需要的小伙伴可以參考一下2022-02-02
.NET 6新特性試用Timer類之PeriodicTimer?
這篇文章主要介紹了.NET 6新特性試用Timer類之PeriodicTimer,PeriodicTimer與其他Timer需要創(chuàng)建事件回調(diào)不同,下,下面文章詳細介紹PeriodicTimer的使用方式,需要的朋友可以參考一下2022-02-02

