自从我从事 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感兴趣- 不幸的是,WP7 仍然停留在“今天”模式。现在 VS2012 出来了,Async CTP 可能很快就会被放弃。