【发布时间】:2018-01-15 02:43:03
【问题描述】:
假设我有一个带有 Main 方法的控制台应用程序,如下所示:
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()?
【问题讨论】:
-
but I also want to know if there any unhandled exceptions.-- 那不是真正的一劳永逸吧? -
没有理由在线程池线程中启动另一个异步操作。如果您想启动
MyAswsomeMethod,请致电MyAwesomeMethod。它已经是异步的。将其包装在异步 lambda 中并在线程池线程中启动它都无济于事,只会浪费系统资源。 -
@Servy 其实是有原因的:如果一切正常,我不想知道有关 MyAwesomeMethod 的任何信息,但我确实想知道其中有关未处理异常的所有信息。
-
@Andrew 我提到的两件事对这种行为都没有任何影响。
标签: c# .net exception-handling task-parallel-library unobserved-exception