为什么我的异步函数在调用 task.run 函数时挂起
Why is my async function hanging when calling task.run function
我想创建一个异步函数,因为我想 return 将结果发送到 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 */ });
}
这个:
return View(FunctionThreeAsync().Result);
使您的代码陷入僵局。 You shouldn't be blocking on an async method。相反,将您的方法标记为 async
,使其成为 return 一个 Task<T>
和 await
调用:
public async Task<ActionResult> DoStuffAsync()
{
return View(await FunctionThreeAsync());
}
异步一路走来。当你有一个异步方法时,它需要异步等待,而不是同步阻塞。这意味着在整个代码库中传播 async
。
我想创建一个异步函数,因为我想 return 将结果发送到 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 */ });
}
这个:
return View(FunctionThreeAsync().Result);
使您的代码陷入僵局。 You shouldn't be blocking on an async method。相反,将您的方法标记为 async
,使其成为 return 一个 Task<T>
和 await
调用:
public async Task<ActionResult> DoStuffAsync()
{
return View(await FunctionThreeAsync());
}
异步一路走来。当你有一个异步方法时,它需要异步等待,而不是同步阻塞。这意味着在整个代码库中传播 async
。