调用异步Web服务会两次触发回调处理程序

时间:2014-09-08 11:35:46

标签: c# web-services windows-phone-8 asynchronous async-await

我使用从样本here获取的代码在WP8应用中调用Web服务:

public static Task<User> GetUser(string code)
{
      TaskCompletionSource<User> tcs = new TaskCompletionSource<User>();

      WS.SoapClient ws = new WS.SoapClient();

      ws.MethodCompleted += (s, e) =>
      {
           if (e.Error == null)
           {
               tcs.SetResult(e.Result);
           }
           else
           {
               tcs.SetException(e.Error);
           }
       };

       ws.MethodAsync(code);

       return tcs.Task;
}

await使用GetUser方法,这很好用。 问题是,MethodCompleted处理程序为每个MethodAsync调用触发两次。

第二个调用没有控制'owner',因此,从SetResult返回时,应用程序本身会抛出'对象引用未设置为实例'异常。

任何想法在这里发生了什么,以及我如何克服它?

0 个答案:

没有答案