1
我有一個與WCF服務器通信的WCF客戶端(C#)。這些客戶端正在異步地進行呼叫。我想知道以下是好還是壞主意:在WCF中傳遞代理對象asyncState
從我的WCF客戶端調用異步操作時,我將對象asyncState變量設置爲代理對象。在我的回調函數中,我從AsyncState值中提取代理對象並在其上調用.EndFunction。
例子:
public void Login()
{
Client client = CreateWCFProxy();
client.BeginLogin(user, pass, OnLoginCompleted, client);
}
public void OnLoginCompleted(IAsyncResult result)
{
Client client = result.AsyncState as Client;
LoginResult loginResult = client.EndLogin(result);
}
我可以存儲客戶端作爲一個類的成員,但如果我做很多併發異步調用可能變得複雜。 (例如,如果代理在我進行一次異步調用時死亡,我需要創建一個新的代理,但我仍然需要舊的代理才能在其他優異的異步調用上調用.EndFunction。
嗯工作得很好。另一種方法是使用lambda表達式或匿名委託,所以你可以在你完成的代碼使用相同的局部變量。
一個例子,你的意思是我應該通過,而不是「OnLoginCompleted」? – Nitramk 2009-10-23 16:32:55
我添加了一些示例代碼的答案。 – Maurice 2009-10-23 20:07:22
我很愚蠢不認爲ab我自己。謝謝。 – Nitramk 2009-10-25 19:01:05