首頁 > 後端開發 > C++ > 如何有效處理 .NET 中單獨執行緒的例外狀況?

如何有效處理 .NET 中單獨執行緒的例外狀況?

Patricia Arquette
發布: 2025-01-05 17:29:40
原創
365 人瀏覽過

How to Effectively Handle Exceptions from Separate Threads in .NET?

如何處理單獨執行緒中拋出的例外狀況

在多執行緒應用程式中,處理除以下執行緒之外的執行緒中發生的異常變得至關重要執行主程式碼的那個。這項挑戰需要仔細處理,以確保正確的錯誤處理和應用程式穩定性。

使用Task;在.NET 4 及更高版本

自.NET 4 起,任務類別提供了一種從單獨執行緒捕獲異常的優雅方法。使用 Task 建立任務後啟動它後,您可以使用任務物件上的 .Exceptions 屬性來檢索引發的任何異常。有兩種方法可以處理這些異常:

  1. 在單獨的方法中:使用ContinueWith()建立一個回呼方法,在任務執行緒中非同步處理異常。
task.ContinueWith(ExceptionHandler, TaskContinuationOptions.OnlyOnFaulted);

private void ExceptionHandler(Task<int> task)
{
    var exception = task.Exception;
    Console.WriteLine(exception);
}
登入後複製
  1. 同樣的方法:透過捕捉 Wait() 拋出的 AggregateException 來處理呼叫者執行緒中的例外狀況。
try
{
    task.Wait();
}
catch (AggregateException ex)
{
    Console.WriteLine(ex);    
}
登入後複製

在 .NET 3.5 中使用執行緒

在 .NET中3.5,其中任務不可用,您可以使用以下方法處理線程中的異常:

  1. 傳遞處理程序操作: 建立一個用於處理異常的委託操作並將其傳遞給線程。發生異常時,執行緒將呼叫該操作。
Exception exception = null;
Thread thread = new Thread(() => SafeExecute(() => Test(0, 0), Handler));
thread.Start();

private void Handler(Exception exception)
{        
    Console.WriteLine(exception);
}
登入後複製
  1. 使用 Out 參數: 修改 SafeExecute() 方法,為例外。線程會在異常發生時設定參數。
Exception exception = null;
Thread thread = new Thread(() => SafeExecute(() => Test(0, 0), out exception));
thread.Start();

...

Console.WriteLine(exception);
登入後複製

透過實作這些技術,你可以有效地處理不同執行緒中拋出的異常,確保你的應用程式即使在存在異常的情況下也能繼續可靠地運行意外錯誤。

以上是如何有效處理 .NET 中單獨執行緒的例外狀況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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