任務中的異常處理技術
在非同步程式設計領域,System.Threading.Tasks.Task
選項1:非同步和等待(C# 5.0 及更高版本)
隨著C# 5.0 的出現,非同步和等待wait 關鍵字為異常處理提供了一種更清晰、更簡化的方法。您可以繞過ContinueWith並以順序方式編寫程式碼,利用try/catch區塊擷取異常,如下所示:
try { await task; } catch (Exception e) { // Handle exceptions }
選項2:ContinueWith重載(C# 4.0及以下版本)
在C#在的早期版本中,您可以採用另一種方法,即使用接受類型參數的ContinueWith 重載任務繼續選項。這允許根據先前任務的狀態對應執行的延續進行細粒度控制。為了專門處理異常,請使用OnlyOnFaulted 選項:
task.ContinueWith(t => { /* Handle exceptions */ }, context, TaskContinuationOptions.OnlyOnFaulted);
範例實作
在您提供的範例中,您可以考慮使用ContinueWith重構程式碼,如下所示:
public class ChildClass : BaseClass { public void DoItInAThread() { var context = TaskScheduler.FromCurrentSynchronizationContext(); Task.Factory.StartNew<StateObject>(() => this.Action()) .ContinueWith(e => this.ContinuedAction(e), context) .ContinueWith(t => HandleExceptions(t), context, TaskContinuationOptions.OnlyOnFaulted); } private void ContinuedAction(Task<StateObject> e) { if (e.IsFaulted) { return; // Skip execution if faulted } // Perform action with e.Result } private void HandleExceptions(Task task) { // Display error window and log the error } }
透過利用這些技術,您可以確保任務操作中強大的異常處理,保持乾淨和結構化程式碼庫。
以上是如何有效處理C#非同步任務中的異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!