我想创建一个异步函数,因为我想将结果返回给UI并且不想让它挂起,但无论如何它都是。
有人可以告诉我为什么会挂这个?
public ActionResult Index()
{
return View(FunctionThreeAsync().Result);
}
private async Task<MyType> FunctionThreeAsync()
{
return await FunctionThree();
}
private Task<MyType> FunctionThree()
{
return Task.Run<MyType>(() => { /* code */ });
}
答案 0 :(得分:8)
此:
return View(FunctionThreeAsync().Result);
使代码死锁。 You shouldn't be blocking on an async method。相反,请将您的方法标记为async
,让其返回Task<T>
和await
来电:
public async Task<ActionResult> DoStuffAsync()
{
return View(await FunctionThreeAsync());
}
Async一路走来。如果您有一个异步方法,则需要异步等待,而不是同步阻塞。这意味着在您的代码库中传播async
。