Асинхронные методы работают в отдельном потоке? - PullRequest
2 голосов
/ 27 февраля 2012

Мое приложение Silverlight вызывает асинхронно метод веб-сервиса следующим образом:

 gServer = new ServiceReference1.Service1SoapClient();

 gServer.Retrieve_DataSet_ListCompleted += new EventHandler<ServiceReference1.Retrieve_DataSet_ListCompletedEventArgs>(Retrieve_Data_List_Completed);

Работает ли метод Retrieve_Data_List_Completed в другом потоке?

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Обработчик событий будет запущен в потоке, в котором был создан Gserver. Асинхронный бит gServer отбрасывает данные, получаемые в его потоке, когда он не говорит, он сообщает «вашему» потоку, что это.

0 голосов
/ 02 марта 2012

Поток не будет запущен в ожидании результата. Асинхронные вызовы веб-сервисов являются полностью поточными. Все, вплоть до операций чтения и записи в сокет, происходит с использованием асинхронных методов. Сам сокет поставит запрос в очередь на порт завершения ввода-вывода, который является примитивом ядра Windows.

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

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