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 回答