有人能指出我使用新的async / await语法从C#调用Web服务(而不是WCF)的示例吗? 像这样:
public async Task<List<Widgets>> GetWidgetsAsync()
{
var proxy = new Service1();
var response = await proxy.GetWidgetsAsync();
return response.Result;
}
答案 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服务。