0

WCF を呼び出す現在の方法は、沼地の標準イベント、非同期スタイルです (たとえば)

foo.EventArgs += Foo_EventArgsCompleted
foo.EventArgsAsync(params...)

これは問題なく動作しますが、時にはひどく遅くなり、結果を処理する別の方法が必要になるため面倒です。

これを Win8 で行う方法に近づける方法はありますか?

private async foo<bool>()
{
  try 
  {
     await foo.EventArgsAsync(params...)
  } 
  catch
  {
     // catch here
  }

  // deal with the code back
  return true;
}

ありがとう

ポール

4

1 に答える 1

0

独自の*TaskAsync拡張メソッドを作成できます。

プロキシに*Begin/*Endメソッドがある場合は、次を使用できますTaskFactory.FromAsync

public static Task<int> FooTaskAsync(this FooClient client)
{
  return Task<int>.Factory.FromAsync(client.BeginFoo, client.EndFoo, null);
}

それ以外の場合は、次を使用する必要がありますTaskCompletionSource

public Task<int> FooTaskAsync(this FooClient client)
{
  var tcs = new TaskCompletionSource<int>();
  client.FooCompleted += (s, e) =>
  {
    if (e.Error != null) tcs.SetException(e.Error);
    else if (e.Cancelled) tcs.SetCanceled();
    else tcs.SetResult(e.Result);
  };
  client.FooAsync();
  return tcs.Task;
}
于 2012-11-28T04:18:27.120 に答える