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

如何有效處理C#非同步任務中的異常?

Linda Hamilton
發布: 2024-12-29 14:30:11
原創
803 人瀏覽過

How to Effectively Handle Exceptions in C# Async Tasks?

任務中的異常處理技術

在非同步程式設計領域,System.Threading.Tasks.Task框架提供了一個非同步程式設計領域,System.Threading.Tasks.Task框架提供了一個非同步程式設計領域,System.Threading.Tasks.Task框架提供了一種管理任務及其潛在異常的機制。 C# 提供了多種方法來有效處理此類異常。

選項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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板