调用task.run函数

时间:2015-07-09 16:56:10

标签: c# asynchronous async-await task-parallel-library task

我想创建一个异步函数,因为我想将结果返回给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 */ });
}

1 个答案:

答案 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