【发布时间】:2015-12-09 13:47:08
【问题描述】:
我需要一个函数在请求完成后在后台执行。 我的代码是这样的:
[HttpPost]
public HttpResponseMessage Post([FromBody] List<JObject> lstData)
{
return PostMethod(lstData);
}
HttpResponseMessage PostMethod(List<JObject> lstData)
{
//do somework
Method1();
return myResult;
}
void Method1()
{
Method2();
}
async void Method2()
{
//do some work
await Task.Delay(25);
Method2();
}
当这个场景运行时,Post 根本不会返回。 我通过创建一个执行 Method2() 的任务来处理它,但我试图利用 Asynchronous Programming
【问题讨论】:
-
这是您的实际代码吗?如果
Method2递归调用自己,这应该stackoverflow。 -
尝试使用
PostMethod(lstData).Result。 -
是的,它正在监视一个列表并在有任何项目时对其进行处理。我正在使用延迟来防止 stackoverflow。
-
那你什么时候返回结果呢?请发帖minimal reproducible example。
-
您似乎没有完全了解请求的生命周期。您基本上是在尝试启动一种类似 Windows 服务的方法,以便在您的方法返回并响应后继续运行,但这是行不通的。如果您需要在异步方法中发生某些事情然后返回,您可以等待它或使用延续在完成后返回响应。
标签: c# rest asynchronous async-await