欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中Task異步的常用方法

 更新時間:2025年07月07日 09:39:06   作者:xiaowu080  
Task是微軟極力推薦的一種多線程處理方式,在線程的延續(xù)、取消,以及多個線程的等待處理等方面要優(yōu)于Thread,ThreadPool,以下介紹的是Task的常用方法,需要的朋友可以參考下

C# 中的 Task 類是 System.Threading.Tasks 命名空間的一部分,用于表示異步操作。

一、Task.Run(Action action):

此靜態(tài)方法用于在后臺運行一個新任務,并返回與該任務關聯(lián)的 Task 實例。

  1. 本質是將任務放入線程池執(zhí)行,自動啟動,適合CPU 密集型或簡單異步操作
  2. 注意:返回的 Task 無法手動控制啟動(已自動啟動)。
Task.Run(() => Console.WriteLine("后臺執(zhí)行"));

二、Task.Start():

用于手動啟動通過 new Task(...) 創(chuàng)建的未啟動任務(默認狀態(tài)為 Created)。

var task = new Task(() => Console.WriteLine("手動啟動"));
task.Start(); // 必須調用才會執(zhí)行

三、Task.Delay(int millisecondsDelay):

此靜態(tài)方法創(chuàng)建一個在指定延遲之后完成的 Task。這對于定時操作或模擬長時間運行的任務非常有用。

await Task.Delay(1000); // 等待1秒

四、任務等待相關方法(阻塞 vs 非阻塞)

方法特性適用場景
await Task.WhenAll非阻塞等待所有任務完成異步方法中,需要等待多個任務全部完成后再繼續(xù)
await Task.WhenAny非阻塞等待任一任務完成異步方法中,只需等待最快完成的任務結果
Task.WaitAll阻塞當前線程等待所有任務同步方法中強制等待(不推薦在異步代碼中使用)
Task.WaitAny阻塞當前線程等待任一任務同步方法中需立即響應第一個完成的任務
Task.Wait()阻塞當前線程等待單個任務同步方法中等待單個任務(等價于 WaitAll 單任務)

關鍵區(qū)別

  1. await 搭配 WhenAll/WhenAny 是非阻塞等待,會釋放當前線程,適合異步上下文(如 UI 線程),避免界面卡頓。
  2. Wait()/WaitAll()/WaitAny() 是阻塞等待,會凍結當前線程,可能導致性能問題(如 UI 無響應),僅建議在純同步代碼中使用。

1.Task.WhenAll(Task[] tasks):

注意:由于此調用不會默認等待,需要再前面添加await。

var task1 = Task.Run(() => { /* 任務1 */ });
var task2 = Task.Run(() => { /* 任務2 */ });
 
await Task.WhenAll(task1, task2);

2.Task.WhenAny(Task[] tasks):

注意:由于此調用不會默認等待,需要再前面添加await。

var task1 = Task.Run(() => { /* 任務1 */ });
var task2 = Task.Run(() => { /* 任務2 */ });
 
var completedTask = await Task.WhenAny(task1, task2);

3.Task.Wait():

var task = Task.Run(() => { /* 代碼 */ });
task.Wait();

4.Task.WaitAll(Params Task[])

var task1 = Task.Run(() => { /* 任務1 */ });
var task2 = Task.Run(() => { /* 任務2 */ });
 
var completedTask = Task.WaitAll(task1, task2);

5.Task.WaitAny(Params Task[])

var task1 = Task.Run(() => { /* 任務1 */ });
var task2 = Task.Run(() => { /* 任務2 */ });
 
var completedTask = Task.WaitAny(task1, task2);

五、Task.ContinueWith(Action continuationAction):

此方法用于在當前任務完成后執(zhí)行另一個操作。這對于鏈式(嵌套)任務執(zhí)行非常有用。(等待一個任務完成)  

// 正常情況下 t1 和 t2 不知道誰先執(zhí)行完
Task<string> t1 = new Task<string>(F1);
Task<string> t2 = new Task<string>(F2);
Task<string> t3 = new Task<string>(F3);
 
//t1先執(zhí)行 t2后執(zhí)行 
t1.ContinueWith(t =>
{
    // t1執(zhí)行完之后 再去執(zhí)行
    t2.Start(); //第二任務
    t2.ContinueWith(t4 =>
    {
        //第二個任務完成了
        //第三個任務對象
        t3.Start();
        t3.ContinueWith(t5 =>
        {
            Console.WriteLine("保證第三個任務完成");
        });
    });
});

注意:在使用 Task 類時,應始終考慮處理異常和取消操作。這可以通過使用 try-catch 語句和 CancellationToken 來實現(xiàn)。

到此這篇關于C#中Task異步的常用方法的文章就介紹到這了,更多相關C# Task異步用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • WPF利用RPC調用其他進程的方法詳解

    WPF利用RPC調用其他進程的方法詳解

    這篇文章主要給大家介紹了關于WPF利用RPC調用其他進程的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-05-05
  • C# winform編程中響應回車鍵的實現(xiàn)代碼

    C# winform編程中響應回車鍵的實現(xiàn)代碼

    這篇文章主要介紹了C# winform編程中響應回車鍵的實現(xiàn)代碼,既在窗口上響應回車鍵事件的方法,需要的朋友可以參考下
    2014-08-08
  • C#多線程與異步的區(qū)別詳解

    C#多線程與異步的區(qū)別詳解

    多線程和異步操作兩者都可以達到避免調用線程阻塞的目的,從而提高軟件的可響應性。甚至有些時候我們就認為多線程和異步操作是等同的概念。但是,多線程和異步操作還是有一些區(qū)別的。而這些區(qū)別造成了使用多線程和異步操作的時機的區(qū)別
    2017-06-06
  • C# FileStream實現(xiàn)大文件復制

    C# FileStream實現(xiàn)大文件復制

    這篇文章主要為大家詳細介紹了C# FileStream實現(xiàn)大文件復制,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C#利用反射實現(xiàn)多數(shù)據(jù)庫訪問

    C#利用反射實現(xiàn)多數(shù)據(jù)庫訪問

    本文詳細講解了C#利用反射實現(xiàn)多數(shù)據(jù)庫訪問的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 常用類之TCP連接類-socket編程

    常用類之TCP連接類-socket編程

    常用類之TCP連接類-socket編程...
    2007-03-03
  • Unity3D動態(tài)生成平面網(wǎng)格

    Unity3D動態(tài)生成平面網(wǎng)格

    這篇文章主要為大家詳細介紹了Unity3D動態(tài)生成平面網(wǎng)格,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 通過?C#/VB.NET?代碼將?Excel?工作表拆分為單獨的文件

    通過?C#/VB.NET?代碼將?Excel?工作表拆分為單獨的文件

    這篇文章主要介紹了通過C#/VB.NET代碼將Excel工作表拆分為單獨的文件,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • C#如何訪問共享文件夾或者磁盤

    C#如何訪問共享文件夾或者磁盤

    這篇文章主要為大家詳細介紹了C#訪問共享文件夾或者磁盤,需要用戶名密碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 快速學習c# 枚舉

    快速學習c# 枚舉

    這篇文章主要介紹了c# 枚舉的相關知識,文中講解非常細致,示例代碼幫助大家學習,感興趣的朋友可以了解下
    2020-06-06

最新評論