Rest API方法内部的调用Async方法根本不返回
本文关键字:方法 Async 返回 调用 API 内部 Rest | 更新日期: 2023-09-27 18:26:13
请求完成后,我需要在后台执行一个函数。我的代码类似于:
[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()的任务来处理它,但我正在尝试使用异步编程
使用异步等待时,最好让异步等待语法从应用程序的顶部流到底部。此外,除非是前端事件处理程序,否则永远不要返回async void,您至少要返回async Task。async void会导致您产生不希望的副作用,例如丢失当前上下文,并且当前方法可能会在这些调用中死锁/阻塞。
我建议您将方法堆栈重写为async Task和async Task<。键入>,这样你会在一个更好的地方:)。
示例:
[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);
}
并遵循这个整个方法链。