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()的任务来处理它,但我正在尝试使用异步编程

Rest API方法内部的调用Async方法根本不返回

使用异步等待时,最好让异步等待语法从应用程序的顶部流到底部。此外,除非是前端事件处理程序,否则永远不要返回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);
}

并遵循这个整个方法链。