Я создаю STA-версию SynchronizationContext для использования в Windows Workflow 4.0. Мне интересно, что делать с исключениями при отправке обратных вызовов.
SynchronizationContext может использоваться для Отправка (выполнение синхронно) или Отправка (выполнение асинхронно) делегатов типа SendOrPostCallback . Хотя в обоих случаях я вызываю делегата в потоке STA, легко понять, как обрабатывать исключения при синхронном выполнении. Я блокирую вызывающий поток, вызываю обратный вызов в моем рабочем потоке, записываю любые исключения, разблокирую вызывающий поток и выбрасываю любые записанные исключения в вызывающем потоке.
Что я должен делать на асинхронной Пост менее ясно. Нет механизма для передачи этого исключения из исполняющего потока обратно в вызывающий поток; Пост - это 100% огонь и забудь. В SendOrPostCallback отсутствует EndInvoke () или WaitHandle . Любые сгенерированные исключения приведут к разрушению приложения.
Разве у меня нет другого выбора, кроме как разрешить исключению в Пост уничтожить мое приложение? Это похоже на поведение по умолчанию в SynchronizationContexts в платформе (спасибо, Reflector). Я не могу понять, почему это так. Разве не должен быть какой-то способ предотвратить асинхронную публикацию s от бума?