假設我有一個主要方法的控制檯應用程序,這樣的事情:從處理異常不期待已久的任務
public static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) =>
{
Console.WriteLine("App Unobserved");
};
TaskScheduler.UnobservedTaskException += (sender, eventArgs) =>
{
Console.WriteLine("Task Unobserved");
};
Task.Run(async() => await MyAwesomeMethod());
// other awesome code...
Console.ReadLine();
}
public static async Task MyAwesomeMethod()
{
// some useful work
if (something_went_wrong)
throw new Exception();
// other some useful work
}
所以,我只需運行MyAwesomeMethod(發射後不管),而要想做到一些其他的工作,但我也想知道是否有任何未處理的例外。但是,應用程序成功完成,沒有任何問題跡象(異常只是被吞噬)。
如何從MyAwesomeMethod()處理異常,而無需等待或使用Task.Run(...)。Wait()?
'但是我也想知道是否有任何未處理exceptions.' - 那就不是真正的火災和忘記,是嗎? –
沒有理由在線程池線程中啓動另一個異步操作。如果你想開始'MyAswsomeMethod'然後調用'MyAwesomeMethod'。它*已經*異步。將其包裝在異步lambda中並在線程池線程中啓動它們都只會浪費系統資源。 – Servy
@Servy實際上,有一個原因:如果一切正常,我不想知道MyAwesomeMethod的任何內容,但我想知道關於未處理異常的所有信息。 – Andrew