我需要在请求完成后在后台执行一个函数。 我的代码类似于:
[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
答案 0 :(得分:0)
使用async-await时,最好让async-await语法从应用程序的顶部流向底部。此外,除非它是前端事件处理程序,否则不要返回async void,您希望至少返回异步任务。 async void会导致您出现意外的副作用,例如丢失当前上下文,并且当前方法最终可能会在这些调用中死锁/阻塞。
我建议你重新编写你的方法堆栈到异步任务和异步任务&lt; .Type&gt;,你会在这样一个更好的地方:)。
示例:
[HttpPost]
public async Task<HttpResponseMessage> Post([FromBody] List<JObject> lstData)
{
return await PostMethod(lstData);
}
async Task<HttpResponseMessage> PostMethod(List<JObject> lstData)
{
//do somework
await Method1();
return myResult;
}
async Task Method1()
{
await Method2();
}
async Task Method2()
{
//do some work
await Task.Delay(25);
}
然后按照这个整个方法链向下。