为什么我的异步函数在调用 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