Выполнение потоков асинхронного ввода-вывода до завершения в том же порядке, в котором они были получены - PullRequest
0 голосов
/ 17 июля 2009

Извините, я очень новичок во всем этом многопоточности ...

Я работаю над клиент-серверным приложением и собираюсь использовать System.Net.Sockets.NetworkStream методы Async IO.

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

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

Если нет, какой инструмент синхронизации будет лучшим? (например, Monitor с, WaitHandle с, Semaphore с? и т. д.)

Редактировать: это в VB 2008 на Win Server 2008

1 Ответ

1 голос
/ 17 июля 2009

Каждая BeginRead соответствует одному EndRead. Если вы хотите узнать больше, вам нужно снова вызвать BeginRead в обратном вызове.


Кстати, розетки довольно низкого уровня. Вы уверены, что не можете использовать WCF для этого?

...