2012-02-08 88 views
0

我正在使用silverlight,並且正在調用一組soap soap服務調用,並且希望在知道所有操作完成後執行操作。如何判斷一組Web服務調用是否完成?

所以,我有3個不同的電話。我在循環中每次進行10次異步調用並等待它們返回。我怎麼知道什麼時候完成了一組?從我使用線程開始已經很長時間了。

回答

1

每次通話都會向客戶端返回一個事件,表示已完成。一個簡單而基本的方法就是爲每個呼叫增加一個包變量,然後當這個值爲10時,你知道所有的呼叫都完成了。

更強大的機制將增加每個請求前的調用次數,然後在請求完成時遞減調用次數。當計數器返回到零時,您知道所有請求都已完成。

需要注意確保對這個變量的訪問是線程安全的。

+0

當完成的事件被激發。所有的函數調用都在同一個線程上嗎?另外,是否有一種方法可以在整數達到10時觸發事件,或者如果整數爲10時應該在完成的調用的末尾放置if以調用另一個函數? – Justin 2012-02-08 14:46:53

+0

@Justin - 線程的安全是迎合增加和減少計數之間的交互。最簡單的解決方案就是檢查'count == 0'(或者如果你已經使用了基本方法),並調用你的最終功能。 – ChrisF 2012-02-08 14:50:59

0

您可以使用BackgroundWorker啓動所有Web服務調用並傳入WaitHandle(如ManualResetEvent),並創建一個這樣的數組。然後使用WaitHandle.WaitAll方法。在每次回調中,您將設置WaitHandle。然後在後臺工作器中它會阻塞(因爲WaitAll),直到所有的等待手柄都被設置。

相關問題