使用新的async / await语法调用Web服务

时间:2014-03-13 17:16:11

标签: c# web-services soap asynchronous async-await

有人能指出我使用新的async / await语法从C#调用Web服务(而不是WCF)的示例吗? 像这样:

public async Task<List<Widgets>> GetWidgetsAsync()
{
    var proxy = new Service1();
    var response = await proxy.GetWidgetsAsync();
    return response.Result;
}

3 个答案:

答案 0 :(得分:1)

对于WCF服务,当您添加引用并生成代理时,可以选择生成基于Task的异步方法或基于APM的BeginXXX/EndXXX异步方法。

我不确定引用旧式XML Web服务(asmx),但我认为至少应该有第二个选项。在这种情况下,您可以BeginXXX/EndXXX包裹Task.Factory.FromAsync,如here所述。

答案 1 :(得分:0)

这里有一个很好的解释:

Interop with Other Asynchronous Patterns and Types

具体来说,该示例符合您(和我)的需求:

 public static Task<string> DownloadStringAsync(Uri url)
 {
      var tcs = new TaskCompletionSource<string>();
      var wc = new WebClient();
      wc.DownloadStringCompleted += (s,e) =>
          {
              if (e.Error != null) 
                 tcs.TrySetException(e.Error);
              else if (e.Cancelled) 
                 tcs.TrySetCanceled();
              else 
                 tcs.TrySetResult(e.Result);
          };
      wc.DownloadStringAsync(url);
      return tcs.Task;
 }

答案 2 :(得分:-1)

以下是Await和Async Asynchronous Programming with Async and Await (C# and Visual Basic)的官方文档。我按照他们的例子,但我没有尝试使用Web服务。