@Andrew1000000

Асинхронные операции в C#: Обработка исключений

Интересует, как правильно обрабатывать исключения при выполнении асинхронных операций в C#.
Например, из кода вызывается асинхронный метод
IAsyncResult result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
Допустим, обернули его в try… catch.
Далее, срабатывает Callback
public static void ListenerCallback(IAsyncResult result) { }
Внутри этого метода тоже необходимо писать try… catch?
В каком случае исключении возникнет в первом блоке (контексте выполнения) и в каком во втором?

Но больше всего интересует конкретный вопрос: если например разорвётся коннект, в каком месте кода произойдёт исключение, и гарантированно ли будет вызван ListenerCallback? Просто в этом методе первым оператором нужно поместить команду, которая обязательно должна быть выполнена.
  • Вопрос задан
  • 3874 просмотра
Пригласить эксперта
Ответы на вопрос 2
shai_hulud
@shai_hulud
Оборачивать надо и BeginGetContext(если только в MSDN не написано что он не бросает исключений)
IAsyncResult result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);

и внутри колбека listener.EndGetContext(result), который выбросит исключение которое могло произойти внутри асинхронной операции.
Ответ написан
@Barsik107

Можно еще для асинхронных операций использовать такую штуку, как Task: http://msdn.microsoft.com/ru-ru/library/system.threading.tasks.task(v=vs.110).aspx

У него есть поле Exception которое можно использовать для этих целей.

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы