Как я могу разрешить исключениям задач распространяться обратно в поток пользовательского интерфейса?

В TPL, если исключение вызывается Task , это исключение фиксируется и сохраняется в Task.Exception , а затем соблюдает все правила наблюдаемых исключений . Если это никогда не наблюдается, оно в конечном итоге повторно запускается в потоке финализатора и приводит к сбою процесса.

Есть ли способ не дать Задаче перехватить это исключение и позволить ему вместо этого распространиться?

Задача, которая меня интересует, уже будет выполняться в потоке пользовательского интерфейса (любезно предоставлено TaskScheduler.FromCurrentSynchronizationContext ), и я хочу, чтобы исключение исчезло, чтобы его можно было обработать с помощью моего существующего обработчика Application.ThreadException .

Я в основном хочу, чтобы необработанные исключения в Задаче вели себя как необработанные исключения в обработчике нажатия кнопки: немедленно распространялись в потоке пользовательского интерфейса и обрабатывались ThreadException.

10
задан Paolo Moretti 27 June 2012 в 16:10
поделиться