我有一个 ASP.NET MVC 异步操作方法,如下所示:
public async Task<ActionResult> IndexAsync()
{
var tasks = new List<Task<string>>
{
GetSomethingAsync("a"),
GetSomethingAsync("b")
};
await Task.WhenAll(tasks);
return View();
}
private async Task<string> GetSomethingAsync()
{
var data = await _someService.GetSomethingAsync().ConfigureAwait(false);
return data.SomeData;
}
现在,当我调试并跳过tasks
变量创建时,任务会立即执行。换句话说,当我将鼠标悬停tasks
在await
队列中时,他们会说“RanToCompletion”。
为什么?
据我了解,应该创建任务,但在被await Task.WhenAll(tasks)
阻塞调用触发之前处于“WaitingForActivation”状态。
有人可以向我解释发生了什么吗?我以前写过这样的代码,它通常按预期工作,所以我想知道这是 ASP.NET 还是 ASP.NET MVC 异步控制器?
TIA。
编辑 如果我将代码更改为:
var tasks = new List<Task<string>>
{
Task.Run(() => GetSomethingAsync("a")),
Task.Run(() => GetSomethingAsync("b"))
};
该方法按预期运行(任务直到 才执行await
)。
在运行异步任务之前,我通常不需要这样做,这在 ASP.NET MVC 中是否需要?