与monodroid的异步WCF调用

时间:2012-11-28 03:54:52

标签: xamarin.android

我当前调用WCF的方法是bog标准事件,async样式(例如)

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;
}

由于

1 个答案:

答案 0 :(得分:0)

你可以write your own *TaskAsync extension methods

如果您的代理拥有*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;
}