首頁 >後端開發 >C++ >如何有效處理C#任務異常?

如何有效處理C#任務異常?

Barbara Streisand
Barbara Streisand原創
2024-12-29 02:21:10534瀏覽

How Can I Effectively Handle Exceptions in C# Tasks?

任務中的異常處理:揭示最佳方法

在非同步程式設計領域,有效管理異常至關重要。使用 System.Threading.Tasks.Task 時,我們需要一個強大的策略來處理潛在的例外。

C# 5.0 及更高版本:Async 和Await 來救援

C# 5.0 及更高版本引入了革命性的async 和wait 關鍵字,為異常處理提供了簡化的解決方案。這些關鍵字允許您以線性方式編寫程式碼,而編譯器將其轉換為使用任務和非同步程式設計模式。

要採用此方法,只需將程式碼包裝在指定方法內的 try-catch 區塊中async 關鍵字。

try
{
    // Start the task.
    var task = Task.Factory.StartNew<StateObject>(() => { /* action */ });

    // Await the task.
    await task;
}
catch (Exception e)
{
    // Perform cleanup here.
}

C# 4.0 及以下版本: TaskContinuationOptions

對於早期版本的 C#,我們可以利用從 TaskContinuationOptions 列舉接受參數的 ContinueWith 重載。這允許我們指定延續任務的執行條件。

具體來說,使用 OnlyOnFaulted 選項可確保僅在先行任務拋出異常時才執行延續任務。

// Get the task.
var task = Task.Factory.StartNew<StateObject>(() => { /* action */ });

// For error handling.
task.ContinueWith(t => { /* error handling */ }, context,
    TaskContinuationOptions.OnlyOnFaulted);

處理非異常情況

處理在 C# 4.0 及更低版本中,我們可以為同一個先行任務建立多個ContinueWith 任務。例如,我們可以有一個在成功完成後執行的任務:

// Get the task.
var task = new Task<StateObject>(() => { /* action */ });

// For error handling.
task.ContinueWith(t => { /* error handling */ }, context, 
    TaskContinuationOptions.OnlyOnFaulted);

// If it succeeded.
task.ContinueWith(t => { /* on success */ }, context,
    TaskContinuationOptions.OnlyOnRanToCompletion);

// Run task.
task.Start();

以上是如何有效處理C#任務異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn