Объяснение Sky Sanders имеет большой смысл, и должно работать для этого сценария.Вот ссылка на блог.
Предоставление подписчика на событие Faulted не совсем совпадает с вызовом channel.Abort () внутри обработчика исключений.
PriceChanged.Add () является эквивалентом PriceChanged + =: вы подписываете обработчик на событие Измененная цена.Размещение блока try / with будет перехватывать исключения, возникающие при подписке (например, настраиваемая реализация Add / Remove в вашем событии), но это не то, что вам нужно.Вы ищете способ обработки исключения при вызове InputStringData.Этот мыслительный процесс естественным образом приводит к вашему решению .
В рабочем коде C # поместите блок try / catch вокруг точки, где исключение возникает на стороне события.Поймайте исключение, генерируемое подписчиком и Debug.Assert с повторным выбросом, предупреждая разработчика, что все исключения должны быть обработаны на стороне подписчика.В вашем коде это означает блок try / with, который предупреждает и перебрасывает в evt.Trigger ().
Вы можете выставить асинхронный блок вместо того, чтобы запускать его в точке объявления.Это должно предоставить вам возможности оркестровки на более высоком уровне: внутри sendMessage.Существует специальный API для отлова исключений, обработки отмены и тайм-аутов в одном центральном месте, которое действительно стоит изучения .