Как определить, завершен ли набор вызовов веб-службы? - PullRequest
0 голосов
/ 08 февраля 2012

Я использую silverlight и вызываю набор мыльных вызовов веб-службы и хочу выполнить операцию, когда узнаю, что все выполнено.

Итак, у меня 3 разных звонка.Я делаю каждый асинхронный вызов 10 раз в цикле и жду их возвращения.Как я знаю, когда один из набора из 10 сделан?Прошло много времени с тех пор, как я работал с потоками.

Ответы [ 2 ]

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

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

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

Необходимо соблюдать осторожность, чтобы обеспечить доступ к этой переменной потокобезопасно.

0 голосов
/ 08 февраля 2012

Вы можете использовать BackgroundWorker , чтобы запустить все вызовы веб-службы и передать WaitHandle , например, ManualResetEvent , и создать их массив. Затем используйте метод WaitHandle.WaitAll . При каждом обратном звонке вы будете устанавливать WaitHandle. Затем в фоновом режиме он блокируется (из-за WaitAll) до тех пор, пока не будут установлены все ручки ожидания.

...