【发布时间】:2013-01-25 14:46:01
【问题描述】:
我开始使用 TPL,并且有一个关于在标记为异步的被调用方法中调用 await 的重要性的问题,而不是等待调用未设为异步的方法的调用函数.
private async void Button_Click_1(object sender, RoutedEventArgs e)
{
TBox.Text += await WebClientDownloader();
TBox.Text += await WebClientDownloadWithAwait();
}
private async static Task<string> WebClientDownloadWithAwait()
{
using (var wc = new WebClient())
{
return await wc.DownloadStringTaskAsync("http://google.com");
}
}
private static Task<string> WebClientDownloader()
{
using (var wc = new WebClient())
{
return wc.DownloadStringTaskAsync("http://google.com");
}
}
有区别吗?它们的表现似乎相同。
【问题讨论】:
-
是我还是等待 DownloadStringTaskAsync 的结果会返回实际响应而不是 Task
?在这种情况下,您的代码将无法构建。 -
@linkerro 如果您从
async方法返回任何内容,则返回包裹在Task中。这就是async的工作原理。 -
不过,你将它包装在一个任务中是没有充分理由的。
-
@linkerro 如果您想使用
async,您不能不将其包装在Task中。这就是充分的理由。如果方法直接返回结果,它必须是同步的。在这种情况下,这意味着它会阻塞 UI 线程。
标签: .net asynchronous task-parallel-library async-await