Silverlight может отправлять только определенное количество одновременных запросов WCF одновременно. Я пытаюсь сериализовать запросы, которые выполняет определенный раздел моего приложения, потому что мне не нужно, чтобы они выполнялись одновременно.
Проблема заключается в следующем (резюме ниже):
«Прокси-серверы WCF в приложениях Silverlight используют SynchronizationContext потока, из которого инициируется вызов веб-службы, для планирования вызова асинхронного обработчика событий при получении ответа. Когда вызов веб-службы инициируется из потока пользовательского интерфейса приложения Silverlight , код обработчика асинхронных событий также будет выполняться в потоке пользовательского интерфейса. "
http://tomasz.janczuk.org/2009/08/improving-performance-of-concurrent-wcf.html
итоги: в основном, если вы заблокируете поток, вызывающий асинхронный метод, он никогда не будет вызван.
Я не могу понять правильную модель работы с нитями, которая дала бы мне то, что я хочу разумным образом.
Мое единственное другое требование - я не хочу, чтобы поток пользовательского интерфейса блокировал.
Насколько я вижу, должен работать, если поток пользовательского интерфейса имеет рабочий поток, который ставит в очередь вызовы как делегаты Action
, а затем использует AutoResetEvent
для выполнения задачи. за один раз в другом рабочем потоке. Есть две проблемы:
1) Поток, который вызывает async, не может заблокировать, потому что тогда async никогда не будет вызван. На самом деле, если вы поместите этот поток в цикл ожидания, я заметил, что он тоже не вызывается
2) Вам нужен способ сообщить из завершенного метода асинхронного вызова, что это сделано.
Извините, что так долго, спасибо, что прочитали. Есть идеи?