这个简单的异步代码存在问题。执行通过TestAsync操作并通过延迟方法,但是当延迟方法返回时,没有其他事情发生。 它似乎因某种原因而被阻止。
public async Task<ActionResult> TestAsync()
{
try
{
var res = await doLongOperation();
return RedirectToAction("Index");
}
catch (Exception e) { }
}
private Task<bool> doLongOperation()
{
var test = new Task<bool>(() => { /*do the long operation..*/ return true; });
return test;
}
有什么建议吗?
答案 0 :(得分:1)
dplyr::setdiff(DF, A)
返回尚未启动的任务。这是一种旧语法,需要您在任务上调用Start
方法。如果您不调用new Task<bool>(() => true)
方法,则任务将永远不会完成,因此异步执行将永远不会继续(Start
将异步等待永久)。
如果您只是想延迟执行,那么只需使用Task.Delay
,如下所示:
await
通常,建议始终创建已在创建时启动的任务。
如果要创建在线程池线程上运行的任务,请使用Task.Run
方法。
答案 1 :(得分:0)
您问题中发布的方法无法正常运行,因为任务未启动,没有任何结束,因此您的等待无限期等待。如果您想使用Async,最好始终使用async,尤其是在ASP.NET上下文中。如果您没有做任何真正异步的事情,那么在Web开发环境中,只需允许它是同步的。
老实说,我相信这里要做的最好的事情就是花时间学习异步/等待,这里有一个很好的资源:Stephen Cleary Blog on Async