.NET提取?Thread?中返回值詳情
以下文章來(lái)源于公眾號(hào)DotNetCore實(shí)戰(zhàn)
Igor Bendrup:
關(guān)于如何獲取 Thread 中的返回值,不同的版本有不同的解決方案。
一、.NET 2.0+
你可以直接使用 Thread 對(duì)象,然后你可以使用閉包(聲明變量并在 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 開(kāi)始,你可以通過(guò) Task 的方式開(kāi)啟 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 開(kāi)始, 你可以使用 await,async 的方式替代 Task 的 Result 屬性,參考如下代碼:
int result = await Task.Run(() => {
? ? //Some work...
? ? return 42; });建議:用 Task 來(lái)替代傳統(tǒng) Thread 所做的事情。
到此這篇關(guān)于.NET提取 Thread 中返回值詳情的文章就介紹到這了,更多相關(guān).NET提取 Thread 中返回值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET?Core使用功能開(kāi)關(guān)控制路由訪問(wèn)操作
這篇文章主要介紹了ASP.NET?Core使用功能開(kāi)關(guān)控制路由訪問(wèn)操作,而對(duì)于一些試驗(yàn)性的功能,我們并不希望用密碼去控制是否允許訪問(wèn),而是想用一種開(kāi)關(guān)的方式開(kāi)放,下面文章我們就來(lái)試著實(shí)現(xiàn)這個(gè)功能,需要的小伙伴可以參考一下2022-02-02
使用Asp.net Mvc3 Razor視圖方式擴(kuò)展JQuery UI Widgets方法介紹
jquery easyui grid或者extjs grid,jtable的代碼非常簡(jiǎn)潔、對(duì)于grid功能要求不是很復(fù)雜的情況下,強(qiáng)烈推薦大家使用2012-11-11
ASP.NET?Core使用功能開(kāi)關(guān)控制路由訪問(wèn)操作(續(xù))
這篇文章主要介紹了ASP.NET?Core使用功能開(kāi)關(guān)控制路由訪問(wèn)操作的(續(xù)),上一篇文章我們已經(jīng)介紹過(guò)一部份該相關(guān)內(nèi)容,??在本文,我們可以判斷當(dāng)前路由地址是否為調(diào)試地址,讓評(píng)估返回真,需要的小伙伴可以參考一下2022-02-02
認(rèn)識(shí)ASP.NET配置文件Web.config
Web.config文件是一個(gè)XML文本文件,它用來(lái)儲(chǔ)存 ASP.NET Web 應(yīng)用程序的配置信息(如最常用的設(shè)置ASP.NET Web 應(yīng)用程序的身份驗(yàn)證方式),它可以出現(xiàn)在應(yīng)用程序的每一個(gè)目錄中2006-07-07
.NET 6新特性試用Timer類之PeriodicTimer?
這篇文章主要介紹了.NET 6新特性試用Timer類之PeriodicTimer,PeriodicTimer與其他Timer需要?jiǎng)?chuàng)建事件回調(diào)不同,下,下面文章詳細(xì)介紹PeriodicTimer的使用方式,需要的朋友可以參考一下2022-02-02
.NET項(xiàng)目在k8s中運(yùn)行的Dapr持續(xù)集成流程
這篇文章主要介紹了.NET項(xiàng)目在k8s中運(yùn)行的Dapr持續(xù)集成流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
ASP.NET Core 中間件的使用之全局異常處理機(jī)制
我們今天這篇文章就來(lái)說(shuō)說(shuō)代碼異常問(wèn)題怎么快速定位,減少不必要的時(shí)間浪費(fèi)。異常是一種運(yùn)行時(shí)錯(cuò)誤,當(dāng)異常沒(méi)有得到適當(dāng)?shù)奶幚?,很可能?huì)導(dǎo)致你的程序意外終止。下面雄安邊將詳細(xì)介紹,需要的朋友可以參考下2021-09-09

