【发布时间】:2012-11-07 08:48:37
【问题描述】:
到目前为止,在 VS2012 中使用“生成基于任务的操作”导入服务引用似乎不起作用。它是灰色的。
针对 WPF 的新项目的测试运行良好 - 我可以选择基于任务的操作或异步操作。
有没有简单的方法将异步调用包装在任务中?
【问题讨论】:
标签: web-services asynchronous visual-studio-2012 task-parallel-library windows-phone-8
到目前为止,在 VS2012 中使用“生成基于任务的操作”导入服务引用似乎不起作用。它是灰色的。
针对 WPF 的新项目的测试运行良好 - 我可以选择基于任务的操作或异步操作。
有没有简单的方法将异步调用包装在任务中?
【问题讨论】:
标签: web-services asynchronous visual-studio-2012 task-parallel-library windows-phone-8
有没有简单的方法将异步调用包装在任务中?
WebClient.DownloadStringCompleted 的示例
public static class WebClientAsyncExtensions
{
public static Task<string> DownloadStringTask(this WebClient client, Uri address)
{
var tcs = new TaskCompletionSource<string>();
DownloadStringCompletedEventHandler handler = null;
handler = (sender, e) =>
{
client.DownloadStringCompleted -= handler;
if (e.Error != null)
{
tcs.SetException(e.Error);
}
else
{
tcs.SetResult(e.Result);
}
};
client.DownloadStringCompleted += handler;
client.DownloadStringAsync(address);
return tcs.Task;
}
}
用法:
async void DownloadExample()
{
WebClient client = new WebClient();
await client.DownloadStringTask(new Uri("http://http://stackoverflow.com/questions/13266079/"));
}
【讨论】:
TaskCompletionSource<T> 是这里的关键。