Асинхронные вызовы C # (в данном случае ASMX WebServices) - PullRequest
3 голосов
/ 07 ноября 2011

Я и мой коллега обсуждали асинхронные процедуры.

Пример:

ws.GetAllEventsAsync("123", "123");
ws.GetAllEventsCompleted += new awc5ws.events.GetAllEventsCompletedEventHandler(ws_GetAllEventsCompleted);

ws в данном случае это веб-служба (asmx).

Теперь возможно, что первая строка кода выполняется и завершается до того, как компилятор достигает 2-й строки, поэтому функция обратного вызова не выполняется.

Так что в этом случаеимеет ли смысл присоединить функцию обратного вызова обработчика событий перед тем, как выполнять Web-метод?Вот так:

ws.GetAllEventsCompleted += new awc5ws.events.GetAllEventsCompletedEventHandler(ws_GetAllEventsCompleted);
ws.GetAllEventsAsync("123", "123");

Я не знаю, правильно ли я здесь понимаю, но надеюсь, вы понимаете мою мысль.Буду признателен, если вы укажете подробности, а не ответ «да» или «нет».

Заранее спасибо

1 Ответ

9 голосов
/ 07 ноября 2011

Да и да:)

Ваш первый пример - состояние гонки. Если вы запустите его, он может работать, а может и нет. Это на самом деле хуже, чем вообще не работать.

Иногда вызов ws.GetAllEventsAsync может даже выполняться синхронно, и в этом случае ошибка очевидна. Когда он выполняется асинхронно, он может завершиться до того, как ваш основной поток подключит обработчик события, и вы пропустите событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...