它已經有一段時間,因爲我已經對WP7的工作,所以我要去假設客戶端代理必須爲每個合同法兩種EAP端點(*Async
+ *Completed
)和APM端點(Begin*
+ End*
) 。
如果這是正確的,那麼你可以使用TaskFactory.FromAsync
包裹Begin*
/End*
方法,因爲這樣的:
[ServiceContract]
public interface ICalculator
{
[OperationContract]
uint Divide(uint numerator, uint denominator);
}
static class Program
{
// Wrap those Begin/End methods into a Task-based API.
public static Task<uint> DivideAsyncTask(this CalculatorClient client,
uint numerator, uint denominator)
{
return Task<uint>.Factory.FromAsync(client.BeginDivide, client.EndDivide,
numerator, denominator, null);
}
static async Task CallCalculator()
{
var proxy = new CalculatorClient();
var task = proxy.DivideAsyncTask(10, 5);
var result = await task;
Console.WriteLine("Result: " + result);
}
static void Main(string[] args)
{
try
{
CallCalculator().Wait();
}
catch (Exception ex)
{
Console.Error.WriteLine(ex);
}
Console.ReadKey();
}
}
你可能有興趣在我的博客文章async WCF today and tomorrow之一 - 不幸的是,WP7還停留在「今日」模式。在VS2012不在的時候,Async CTP很快就會被放棄。
我發現這篇關於等待異步函數的文章。像魅力一樣工作,而且非常有效。看看這篇文章:http://blogs.msdn.com/b/ptorr/archive/2011/07/12/background-agents-part-2-of-3.aspx在這裏下載代碼:[http:/ /blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-18-51-05/BackgroundAgentDemo.zip](http://blogs.msdn.com/cfs-file。 ashx/__ key/communityserver-components-postattachments/00-10-18-51-05/BackgroundAgentDemo.zip) – Brandsdal