WP7に取り組んでからしばらく経ちました。そのため、クライアントプロキシには、コントラクトメソッドごとにEAPエンドポイント(+ )とAPMエンドポイント(+ )の両方があると想定します。*Async
*Completed
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();
}
}
今日と明日の非同期WCFに関する私のブログ投稿の1つに興味があるかもしれません。残念ながら、WP7はまだ「今日」モードのままです。非同期CTPは、VS2012がリリースされたため、間もなく廃止される可能性があります。