【发布时间】:2012-12-26 21:27:43
【问题描述】:
我正在尝试这个异步代码只是为了测试 async 关键字:
public async Task<string> AsyncMethod()
{
var link = "http://www.google.com";
var webclient = new WebClient();
var result = await webclient.DownloadStringTaskAsync(new Uri(link));
return result;
}
public async Task<ActionResult> Index()
{
var a = AsyncMethod();
var b = AsyncMethod();
Task.WaitAll(a, b);
return View();
}
但是当我调试它时,调试器点击Task.WaitAll 并且什么也不做(返回键永远不会执行)..
如果我在两个 'AsyncMethod' 之前设置 await 并删除 Task.WaitAll 它可以工作。那么我做错了什么?
【问题讨论】:
-
WaitAll 是否启动任务?如果没有,那么您将等待很长时间,因为没有人启动任务...
-
@flq 你说的开始任务是什么意思?
-
@flq 由带有
async修饰符标记的方法返回的任务已经在运行。 -
你是否在返回结果处设置了断点?也许在 Task.WaitAll 之前任务已经完成。也尝试在 WaitAll 之后打印结果,看看你是否得到了什么。另一件事,您不需要在 Index() 中使用 async 关键字。
-
我认为在Task.WaitAll之前它没有完成,下载不能这么快,如果我删除Index的异步我会得到一个异常。
标签: c# async-await