我想从我的网络API代码中异步运行一个方法,但我没有得到理想的行为。
我试图以异步方式执行LongCallMethod。这样我就可以在LongCallMethod完成之前将成功返回给我的用户。
我尝试过使用await和async的各种调用组合,但仍未取得任何成功。 我可能无法正确理解async / await的概念。
你能告诉我我的错误是什么吗?
我的控制器代码在
之下 [HttpGet("{id}")]
public string Get(int id)
{
PracticeAsync p = new PracticeAsync();
p.LongCallMethod();
return "Success";
}
PracticeAsync类的代码如下:
public class PracticeAsync
{
public async Task LongCallMethod()
{
var x = await CallThis();
}
public async Task<dynamic> CallThis()
{
Thread.Sleep(10000); //DB call
return "done";
}
}
答案 0 :(得分:1)
我试图以异步方式执行LongCallMethod。这样我就可以在LongCallMethod完成之前将成功返回给我的用户。
您需要使用SignalR或proper distributed architecture。具体来说,您的webapp应该将其工作放入一个可靠的队列中,并从该队列中读取一个独立的服务并完成工作。 ASP.NET旨在为Web请求提供服务,如果您尝试强制执行此操作,则会出现严重的可靠性限制。