TaskScheduler.UnobservedTaskException never gets called

前端 未结 2 504
挽巷
挽巷 2020-12-31 07:14

Based on my research, I have learned the following:

  1. TaskScheduler.UnobservedTaskException must wait for the task to be garbage collected before th
2条回答
  •  醉梦人生
    2020-12-31 07:57

    To me, TaskScheduler.UnobservedTaskException at first gives a very wrong sense of security. It's really not worth much if it depends on Garbage Collection.

    I found the following solution, taken from this msdn article, to be much more reliable. It basically executes the continuation block (where you log the exception) only if there were unhandled exceptions in task1, and does not block UI execution.

    You might also want to flatten nested AggregateExceptions and perhaps create a extension method, as Reed Copsey depicted here.

    var task1 = Task.Factory.StartNew(() =>
    {
        throw new MyCustomException("Task1 faulted.");
    })
    .ContinueWith((t) =>
    {
        Console.WriteLine("I have observed a {0}",
            t.Exception.InnerException.GetType().Name);
    },
    TaskContinuationOptions.OnlyOnFaulted);
    

提交回复
热议问题