C # асинхронные сокеты - всегда ли вызывается асинхронный обратный вызов? - PullRequest
1 голос
/ 16 марта 2012

Если я использую:

connectionSocket.BeginSend(data, 0, length, SocketFlags.None, out error, new AsyncCallback(SendDataDone), state);

Вызывается ли обратный вызов SendDataDone даже в тех случаях, когда операция была завершена синхронно, или я должен проверить asyncRes.CompletedSynchronously и узнать, возвращает ли он значение true, что мой обратный вызов не был вызван?

Я бы ожидал, что обратный вызов всегда вызывается ...

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Возможно, да, см. https://stackoverflow.com/a/635951/555547.

1 голос
/ 16 марта 2012

Согласно документации:

Ваш метод обратного вызова должен вызывать метод EndSend. Когда ваш приложение вызывает BeginSend, система будет использовать отдельный поток для выполнить указанный метод обратного вызова и будет блокировать EndSend до Сокет отправляет количество запрошенных байтов или выдает исключение.

Так что, пока ничто не убивает поток, вы учли возможные исключения аргументов и готовы ждать, все должно быть хорошо. Вам, вероятно, нужно знать только о том, как обрабатывать возможные исключения SocketException или ObjectDisposedException.

...