国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#基礎(chǔ)--線程之Task

這篇具有很好參考價(jià)值的文章主要介紹了C#基礎(chǔ)--線程之Task。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

C#基礎(chǔ)–線程之Task

Task 是.NetFramework3.0出現(xiàn)的,Task里面的線程是來(lái)自于線程池

一、Task

1. 開(kāi)啟一個(gè)線程

Task 構(gòu)造函數(shù)

傳入一個(gè)無(wú)參數(shù)的 Action 委托作為參數(shù)

Task task = new Task(() =>
                     {
                         this.DoSomethingLong("btntask_Click1");
                     });
task.Start();

Run() 靜態(tài)方法

//Run 為靜態(tài)方法
Task.Run(() =>
         {
             this.DoSomethingLong("btntask_Click2");
         });

TaskFactory 工廠

TaskFactory taskFactory = new TaskFactory();
taskFactory.StartNew(() =>
                     {
                         this.DoSomethingLong("btntask_Click3");
                     });
TaskFactory taskFactory = Task.Factory;
taskFactory.StartNew(() =>
                     {
                         this.DoSomethingLong("btntask_Click3");
                     });

Task.Delay 延遲執(zhí)行

Task.Delay 出現(xiàn)于4.5版本

Thread.Sleep() 是阻塞的,而 Delay 是非阻塞的;如果Sleep 和Delay 平級(jí),則會(huì)因Sleep造成阻塞(卡界面)

ContinueWith 類(lèi)似于回調(diào)

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();

//任務(wù)在2000ms=2s 以后執(zhí)行
Task task = Task.Delay(2000).ContinueWith(t =>  
                                          {
                                              Console.WriteLine($"之前花費(fèi)時(shí)間:{stopwatch.ElapsedMilliseconds}");
                                              Console.WriteLine("回調(diào)已完成");
                                              Thread.Sleep(2000);
                                              Console.WriteLine($"之后花費(fèi)時(shí)間:{stopwatch.ElapsedMilliseconds}");
                                              stopwatch.Stop();
                                          });

C#基礎(chǔ)--線程之Task,C# .Net,c#,asp.net

2. 等待任務(wù)

2.1 WaitAny

阻塞式,當(dāng)前線程會(huì)等待任意任務(wù)結(jié)束,然后才能執(zhí)行后續(xù)語(yǔ)句

List<Task> tasksList = new List<Task>();

TaskFactory taskFactory = new TaskFactory();

tasksList.Add(taskFactory.StartNew(() => { this.Coding("杰克", "系統(tǒng)管理"); }));
tasksList.Add(taskFactory.StartNew(() => { this.Coding("流光易逝", "部門(mén)管理"); }));
tasksList.Add(taskFactory.StartNew(() => { this.Coding("偏執(zhí)", "客戶(hù)管理"); }));
tasksList.Add(taskFactory.StartNew(() => { this.Coding("清茶", "接口管理"); }));
tasksList.Add(taskFactory.StartNew(() => { this.Coding("秋陌", "寫(xiě)Api"); }));

//如果有一個(gè)同學(xué)完成了某一個(gè)模塊,老師就需要準(zhǔn)備環(huán)境!
//等待某一個(gè)線程執(zhí)行完畢以后 繼續(xù)往后執(zhí)行
Task.WaitAny(tasksList.ToArray());
Console.WriteLine("Richard老師開(kāi)始準(zhǔn)備環(huán)境部署項(xiàng)目!");

C#基礎(chǔ)--線程之Task,C# .Net,c#,asp.net

2.2 WaitAll

阻塞式,當(dāng)前線程會(huì)等待所有任務(wù)結(jié)束,然后才能執(zhí)行后續(xù)語(yǔ)句

List<Task> tasksList = new List<Task>();

TaskFactory taskFactory = new TaskFactory();

tasksList.Add(taskFactory.StartNew(() => { this.Coding("杰克", "系統(tǒng)管理"); }));
tasksList.Add(taskFactory.StartNew(() => { this.Coding("流光易逝", "部門(mén)管理"); }));
tasksList.Add(taskFactory.StartNew(() => { this.Coding("偏執(zhí)", "客戶(hù)管理"); }));
tasksList.Add(taskFactory.StartNew(() => { this.Coding("清茶", "接口管理"); }));
tasksList.Add(taskFactory.StartNew(() => { this.Coding("秋陌", "寫(xiě)Api"); }));

//Richard老師要等待大家都完成了以后,開(kāi)始給點(diǎn)評(píng)!
Task.WaitAll(tasksList.ToArray()); //阻塞主線程
Console.WriteLine("5個(gè)模塊均已完成,Richard老師點(diǎn)評(píng)!");

C#基礎(chǔ)--線程之Task,C# .Net,c#,asp.net

2.3 WhenAny

非阻塞式,當(dāng)前線程會(huì)返回一個(gè)新的任務(wù),在該任務(wù)中等待任意任務(wù)結(jié)束,因此當(dāng)前線程不會(huì)阻塞

static int TaskMethod(string name, int seconds)
{
    Console.WriteLine("Task {0} 運(yùn)行在線程 {1} 上。是否是線程池線程: {2}",
    name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);
    Thread.Sleep(TimeSpan.FromSeconds(seconds));
    return 42 * seconds;
}

var tasks = new List<Task<int>>();
for (int i = 1; i < 4; i++)
{
    int counter = i;
    var task = new Task<int>(() => TaskMethod(string.Format("Task {0}", counter), counter));
    tasks.Add(task);
    task.Start();
}
 
while (tasks.Count > 0)
{
    var completedTask = Task.WhenAny(tasks).Result;//這里的Result是指代Task<int>!
    tasks.Remove(completedTask);
    Console.WriteLine("A task has been completed with result {0}.", completedTask.Result);
}

C#基礎(chǔ)--線程之Task,C# .Net,c#,asp.net

2.4 WhenAll

非阻塞式,當(dāng)前線程會(huì)返回一個(gè)新的任務(wù),在該任務(wù)中等待所有任務(wù)結(jié)束,因此當(dāng)前線程不會(huì)阻塞

static int TaskMethod(string name, int seconds)
{
    Console.WriteLine("Task {0} 運(yùn)行在線程 {1} 上。是否是線程池線程: {2}",
    name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);
    Thread.Sleep(TimeSpan.FromSeconds(seconds));
    return 42 * seconds;
}

var firstTask = new Task<int>(() => TaskMethod("First Task", 3));
var secondTask = new Task<int>(() => TaskMethod("Second Task", 2));
var whenAllTask = Task.WhenAll(firstTask, secondTask);
whenAllTask.ContinueWith(t =>Console.WriteLine("The first answer is {0}, the second is {1}", t.Result[0], t.Result[1])
	, TaskContinuationOptions.OnlyOnRanToCompletion
);
 
firstTask.Start();
secondTask.Start();

C#基礎(chǔ)--線程之Task,C# .Net,c#,asp.net文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-589834.html

到了這里,關(guān)于C#基礎(chǔ)--線程之Task的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【服務(wù)器】ASP.Net Core(C#)創(chuàng)建Web站點(diǎn)

    【服務(wù)器】ASP.Net Core(C#)創(chuàng)建Web站點(diǎn)

    簡(jiǎn)單幾步實(shí)現(xiàn)本地ASP.Net.Core web 站點(diǎn)結(jié)合cpolar內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)遠(yuǎn)程訪問(wèn) 1. 創(chuàng)建站點(diǎn) *環(huán)境搭建,這邊測(cè)試,使用.NET 6.0 SDK,可以點(diǎn)擊跳轉(zhuǎn)到官網(wǎng)下載,下載后安裝即可. 安裝完成后,進(jìn)入到某個(gè)文件夾,打開(kāi)powershell執(zhí)行下面命令,創(chuàng)建新的 Web 應(yīng)用,名稱(chēng)叫:aspnetcoreapp 2. 運(yùn)行站點(diǎn) 信任開(kāi)

    2024年02月11日
    瀏覽(24)
  • C#使用Asp.Net創(chuàng)建Web Service接口并調(diào)用

    C#使用Asp.Net創(chuàng)建Web Service接口并調(diào)用

    目錄 一.創(chuàng)建Asp.net web應(yīng)用以及Web Service服務(wù) (1).運(yùn)行環(huán)境 (2)創(chuàng)建項(xiàng)目 二.創(chuàng)建控制臺(tái)應(yīng)用來(lái)調(diào)用上面創(chuàng)建的Web Service 開(kāi)發(fā)工具: Visual Studio 2022 Current (免費(fèi)社區(qū)版) 框架版本: .net framework4.7.2,更高的.net 5 、net6貌似沒(méi)有默認(rèn)提供帶web service的asp.net 應(yīng)用模板了。 確保VS的工作負(fù)荷有

    2024年01月18日
    瀏覽(29)
  • RDLC報(bào)表使用教程(VS2019+Asp.Net(C#)+iframework)

    RDLC報(bào)表使用教程(VS2019+Asp.Net(C#)+iframework)

    VS2019 開(kāi)發(fā)環(huán)境配置 在vs環(huán)境中,菜單擴(kuò)展=管理擴(kuò)展 聯(lián)機(jī)中搜索 RDLC,出現(xiàn)MicroSoft RDLC Report Designer,如下 安裝完畢后,點(diǎn)擊右鍵項(xiàng)目(Asp.Net Web應(yīng)用程序)=添加=新建項(xiàng),會(huì)出現(xiàn) 報(bào)表、報(bào)表精靈(報(bào)表向?qū)В缦拢?? 新建報(bào)表后,就直接可以進(jìn)行RDLC報(bào)表開(kāi)發(fā)。 Web.Config里面配

    2024年02月01日
    瀏覽(49)
  • C#面:列舉ASP.NET頁(yè)面之間傳遞值的幾種方式

    查詢(xún)字符串(Query String): 可以通過(guò)在URL中添加參數(shù)來(lái)傳遞值。 例如:http://example.com/page.aspx?id=123 在接收頁(yè)面中可以通過(guò)Request.QueryString[“id”]來(lái)獲取傳遞的值。 會(huì)話狀態(tài)(Session State): 可以使用Session對(duì)象在不同頁(yè)面之間存儲(chǔ)和檢索值。 在發(fā)送頁(yè)面中可以使用Session[“k

    2024年02月19日
    瀏覽(19)
  • ASP.NET Core 8 基礎(chǔ)

    ASP.NET Core 8 基礎(chǔ)

    2023年11月將發(fā)布發(fā)布.NET 8,基于.NET 8 的 ASP.NET Core 8.0也會(huì)一并發(fā)布,這是繼ASP.NET Core 6.0之后,又一個(gè)重要版本,因?yàn)橐肓薾ativeAOT,在性能上有很大提升,所以系統(tǒng)地學(xué)習(xí)一下這項(xiàng)技術(shù)。 ASP.NET Core 的幾個(gè)主要優(yōu)勢(shì): 跨平臺(tái),支持 Windows, macOS, Linux,Docker,Azure和AWS等云服務(wù)自

    2024年02月11日
    瀏覽(50)
  • Asp.Net 使用Log4Net (基礎(chǔ)版)

    創(chuàng)建ASP.NET Web Forms項(xiàng)目 在Visual Studio中創(chuàng)建一個(gè)新的ASP.NET Web Forms項(xiàng)目。命名為\\\"Log4NetDemo\\\"。 打開(kāi)NuGet包管理器控制臺(tái),并運(yùn)行以下命令來(lái)安裝Log4Net: 在Web.config文件中添加Log4Net的配置。將以下內(nèi)容粘貼到Web.config文件中。 在Global.asax文件中,我們需要初始化Log4Net。在 Applicatio

    2024年02月15日
    瀏覽(50)
  • C# ASP.NET Core Web API 身份授權(quán)(JWT)驗(yàn)證(一)

    C# ASP.NET Core Web API 身份授權(quán)(JWT)驗(yàn)證(一)

    1.開(kāi)發(fā)環(huán)境 VS2022,安裝時(shí)記得勾選ASP.NET有關(guān)的都選上,建議全選,省的麻煩。 ???????? 2.創(chuàng)建初始工程 TestApi (你自己的工程名稱(chēng))。 ? ?這就創(chuàng)建工程成功了,按 F5 則可以進(jìn)行調(diào)試了。 而在項(xiàng)目中,我們不僅僅會(huì)用到基礎(chǔ)的api功能,我們一般還會(huì)用到? 身份授權(quán)(J

    2024年02月02日
    瀏覽(29)
  • 【ASP.NET Core 基礎(chǔ)知識(shí)】--最佳實(shí)踐和進(jìn)階主題--設(shè)計(jì)模式在ASP.NET Core中的應(yīng)用

    一、設(shè)計(jì)模式概述 1.1 什么是設(shè)計(jì)模式 設(shè)計(jì)模式是在軟件設(shè)計(jì)過(guò)程中反復(fù)出現(xiàn)的、經(jīng)過(guò)驗(yàn)證的、可重用的解決問(wèn)題的方法。它們是針對(duì)特定問(wèn)題的通用解決方案,提供了一種在軟件開(kāi)發(fā)中可靠的指導(dǎo)和標(biāo)準(zhǔn)化方法。設(shè)計(jì)模式通常描述了一種在特定情景下的解決方案,包括了問(wèn)

    2024年02月21日
    瀏覽(850)
  • 在 C#和ASP.NET Core中創(chuàng)建 gRPC 客戶(hù)端和服務(wù)器

    在 C#和ASP.NET Core中創(chuàng)建 gRPC 客戶(hù)端和服務(wù)器

    gRPC 是一種可以跨語(yǔ)言運(yùn)行的現(xiàn)代高性能遠(yuǎn)程過(guò)程調(diào)用 (RPC) 框架。gRPC 實(shí)際上已經(jīng)成為 RPC 框架的行業(yè)標(biāo)準(zhǔn),Google 內(nèi)外的組織都在使用它來(lái)從微服務(wù)到計(jì)算的“最后一英里”(移動(dòng)、網(wǎng)絡(luò)和物聯(lián)網(wǎng))的強(qiáng)大用例。 gRPC是一個(gè)高性能的開(kāi)源的通用RPC框架,由Google公司開(kāi)發(fā),支持常

    2024年04月23日
    瀏覽(93)
  • C# Asp.Net6 MVC,Log4net NLog 日志插件應(yīng)用 及Windows、Liux環(huán)境下程序發(fā)布

    C# Asp.Net6 MVC,Log4net NLog 日志插件應(yīng)用 及Windows、Liux環(huán)境下程序發(fā)布

    connected Services 服務(wù)依賴(lài)(第三方) Properties 文件下 launchSettings.json 項(xiàng)目啟動(dòng)配置文件 wwwroad 存放靜態(tài)文件 依賴(lài)項(xiàng) 管理Nuget程序包 appsettings.json 配置文件 C 業(yè)務(wù)邏輯運(yùn)算–調(diào)用其他的服務(wù)做業(yè)務(wù)邏輯 M 實(shí)體對(duì)象,保存數(shù)據(jù),數(shù)據(jù)傳輸 V 視圖,表現(xiàn)層 第一步:尋找log4net 程序包

    2024年02月14日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包