在Silverlight應用程序,我需要並行運行多個異步調用 - 他們將調用服務器來檢查數據等我的僞代碼的設置是這樣如何正確連接多個異步方法的結果?
public interface IAsyncVerifier
{
event EventHandler OnCompleted;
void Verify();
}
// Subscribe to verifier completion events
foreach (var verifier in this.VerifierEngine.GetVerifiers())
{
var asyncVerifier = verifier as IAsyncVerifier;
if (asyncVerifier == null || !asyncVerifier.IsVerifierRunning()) continue;
asyncVerifier.OnCompleted += (s, a) => DoWhat(); // ????????
asyncVerifier.Verify();
}
所以,在我的心目中,我有共同的接口爲所有這些任務。然後在執行之前,我訂閱他們所有的事件和...?
我需要以某種方式等待他們完成並繼續我在做什麼。如何正確編寫剩餘的代碼?我看到某種類型的counter
,每當我撥打Verify()
時我都會增加,並且每次獲得OnCompleted
時遞減。但是我沒有全面瞭解如何將它們包裝在一起,所以沒有味道。此外,Silverlight中運行那些在後臺線程,如果我理解正確的話(調用WCF服務)
編輯:
我與第三方驗證發動機的工作。 this.Verifier.VerifierEngine
不是我寫的。我只能將驗證者添加到收藏中。通常它們在主線程上執行以驗證屬性等。我的需求是創建可以回撥給服務器的驗證程序,因此在Silverlight中爲async
。我沒有手動處理線程,當我調用服務時,它返回主線程,所以沒關係,這部分對我來說是隱藏的。我想要的只是能夠「等待」,直到所有驗證者完成。我現在唯一可以檢查的方式就是我的方式。
因此,我的UI很古怪。在完成修改字段後,用戶點擊'保存並開始驗證。我檢查是否所有驗證者IsVerifierRunning
並給用戶留言說他需要重試。我真的需要能夠等待所有完成,然後繼續。
- 我不需要擔心線程,除非妥善解決將涉及使用線程
- 我有機會獲得結果已經
你可以添加更多的細節?調用驗證已經是非阻塞的?或者你需要讓他們不被阻塞?你需要訪問驗證結果嗎?或者只是在所有驗證完成時通知/繼續? –
另外,你的驗證循環已經離開UI線程嗎?如果你想使用任何類型的阻塞同步(比如其他應答者指出的手動重置事件),你需要確保你不在UI線程上。 –
你的意思是像這個例子一樣傳達嗎?「2個異步調用,當兩個調用都完成時,你想繼續進行」 – vaibhav