在.NET 4.5你可以創建一個返回異步調用,而不是APM式的方法(BeginX/EndX)
任務的代理
在.NET 4中,你可以在APM方法轉換爲使用Task.Factory.FromAsync任務。假設你的服務方法接收一個參數:
public MyResponse MyCall(MyRequest request);
您可以使用這樣的代碼到APM式調用轉換(開始/結束)到一個任務:
var myRequestObject =...;
var callTask=Task<MyResponse>.Factory.FromAsync(
client.BeginMyCall,
client.EndMyCall,
myRequestObject,
null); // The state object, typically not used
要使用更多的參數工作,使用其中一個接受更多參數的重載(最多3個)
多個FromAsync重載可能非常混亂,編譯器可能會抱怨很多無法找到通用參數的類型。
關鍵是要明白,第一個參數只需IAsyncResult對象,而第二個參數要求將處理最終結果的功能。即使是接受Func鍵<>作爲第一個參數,immediatelly運行它,並保持與IAsyncResult的
以上調用工作過載是相同的:
var ar=client.BeginMyCall(myRequestObject,null,null);
var callTask=Task<MyResponse>.Factory.FromAsync(ar,client.EndMyCall);
使用begin ..方法,這些都是asnych allready。快速谷歌將產生大量的例子。 – CSharpie
這應該是一個起點:http://msdn.microsoft.com/en-us/library/dd997423.aspx。你可以通過顯示一些代碼來澄清你的問題,你的服務層是怎樣的?你想怎麼稱呼它? – Rudi
如果你願意,你可以用'開始...'方法一起使用'Task.Factory.FromAsync'。 – Shaamaan