我在应用程序(WPF)中处理异常时遇到了麻烦。
我正在使用很多任务,我想为所有异常(甚至是内部任务)设置一个全局异常处理程序。
我尝试过多个处理程序:
AppDomain.CurrentDomain.UnhandledException
DispatcherUnhandledException
这些适用于在Application中抛出的异常(不在任务中)
对于我尝试使用的任务的例外情况
TaskScheduler.UnobservedTaskException
但这是在经过一段大的延迟之后才开始的。我认为这是因为GarbageCollector,所以我找到了一个解决方案(它也不起作用)。此解决方案如下所示:
.ContinueWith(c =>
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
},TaskContinuationOptions.OnlyOnFaulted);
您能告诉我应该如何处理这些例外情况吗?我希望每次运行任务时都避免处理它。对我来说,首选全局处理程序。
答案 0 :(得分:0)
我认为你可以为Task编写一个扩展类来处理异常
public static class ExtensionClass
{
public static void Catch<TException>(this Task task, Action<TException> exceptionHandler,
TaskScheduler scheduler = null) where TException : Exception
{
if (exceptionHandler == null)
throw new ArgumentNullException("exceptionHandler cannot be null");
}
}
你可以像这样编写所有Task.Run
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Task.Run((Action)TryExecute).Catch<Exception>((r) => Console.WriteLine("Caught Exception {0}", r));
}
private static void TryExecute()
{
throw new NotImplementedException();
}