當前位置: 妍妍網 > 碼農

C#中的Task.ContinueWith使用例項

2024-05-29碼農

在C#中, Task.ContinueWith 方法是一個強大的工具,用於在異步操作完成後執行後續操作。它允許你定義一個任務( Task ),然後在這個任務完成後,自動執行另一個任務。這在處理異步編程時特別有用,比如在進行網路請求、檔I/O操作或資料庫查詢後需要執行某些操作。

下面,我們將透過一個簡單的範例來演示如何使用 Task.ContinueWith

範例場景

假設我們有一個需要從遠端伺服器獲取數據的任務,獲取數據後,我們需要對數據進行處理,並在處理完成後打印結果。

實作程式碼

using System;
using System.Threading.Tasks;
classProgram
{
staticasync Task Main(string[] args)
{
Console.WriteLine("開始異步任務...");
// 模擬從遠端伺服器獲取數據的任務
Task<string> getDataTask = GetDataFromServerAsync();
// 使用ContinueWith定義獲取數據後的處理任務
Task processDataTask = getDataTask.ContinueWith(t =>
{
if (t.IsFaulted)
{
Console.WriteLine("獲取數據時出錯: " + t.Exception.InnerException.Message);
}
elseif (t.IsCanceled)
{
Console.WriteLine("任務被取消");
}
else
{
string data = t.Result; // 獲取前一個任務的結果
string processedData = ProcessData(data); // 處理數據
Console.WriteLine("處理後的數據: " + processedData);
}
});
await processDataTask; // 等待處理任務完成
Console.WriteLine("所有任務完成");
}
// 模擬從遠端伺服器獲取數據的異步方法
staticasync Task<stringGetDataFromServerAsync()
{
await Task.Delay(2000); // 模擬網路延遲
return"原始數據";
}
// 模擬數據處理方法
staticstringProcessData(string data)
{
return"處理後的" + data;
}
}





程式碼解釋

  1. GetDataFromServerAsync 方法模擬了一個從遠端伺服器獲取數據的異步操作。在這個範例中,我們只是使用 Task.Delay 來模擬網路延遲,並返回一個字串 "原始數據"。

  2. Main 方法中,我們首先啟動 GetDataFromServerAsync 任務。然後,我們使用 ContinueWith 方法來定義一個在這個任務完成後需要執行的新任務。這個新任務會檢查前一個任務的狀態(是否出錯、是否被取消),如果一切正常,它會獲取前一個任務的結果(即獲取到的數據),對數據進行處理,並打印處理後的結果。

  3. 最後,我們使用 await 關鍵字等待處理任務完成,並打印 "所有任務完成" 來表示整個流程已經結束。

註意事項

  • 當使用 ContinueWith 時,需要註意前一個任務的狀態。如果前一個任務出錯或被取消, ContinueWith 定義的任務仍然會執行,但你需要檢查並處理這些情況。

  • ContinueWith 方法有多個多載,允許你指定任務的排程器、任務繼續執行的選項等。在這個簡單範例中,我們使用了預設設定。

  • 在實際套用中,你可能還需要處理更復雜的錯誤場景、取消操作以及任務之間的數據傳遞等問題。