试图使用Async / Await异步运行一个函数,而不是使用c#?

时间:2017-06-22 19:27:57

标签: c# async-await

我想从我的网络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";
    }
}

1 个答案:

答案 0 :(得分:1)

  

我试图以异步方式执行LongCallMethod。这样我就可以在LongCallMethod完成之前将成功返回给我的用户。

That's not how async works

您需要使用SignalR或proper distributed architecture。具体来说,您的webapp应该将其工作放入一个可靠的队列中,并从该队列中读取一个独立的服务并完成工作。 ASP.NET旨在为Web请求提供服务,如果您尝试强制执行此操作,则会出现严重的可靠性限制。