异步方法和内部循环

时间:2016-09-06 17:19:37

标签: .net c#-4.0 async-await

我有一个与内部Web API交互的控制台应用程序。它有时会正确运行,但有时它会抛出异常,我无法找到。我唯一怀疑的可能是因为我使用的每个方法都不是异步的。

这是它开始的地方:

我的控制台应用程序运行异步方法Process():

    static void Main(string[] args)
    {
    Process().Wait();
}

Process()连接到内部Web appi:

private static async Task Process()
    {

    using (var http = new HttpClient())
        {
            http.BaseAddress = new Uri("http://localhost:112345/");
            var response = await http.PostAsJsonAsync("/api/PostStuff", data);
            var result = response.Content.ReadAsStringAsync().Result;
            Console.WriteLine(result);
    }

}

以下是内部网络API:

    [HttpPost("api/PostStuff")]
    public async Task<string>  PostStuff([FromBody] Data data)
    {
        foreach (var s in MyStuff.GetStuff()
        {
             // for loop that gets data from another class that is not asynchronous
        }
        return stuff;
    }

我担心的是,从使用MyStuff.GetStuff()的循环中收集的数据使用非任务或异步的方法。

我是否需要确保异步方法中使用的每个方法都是异步的?

谢谢!

1 个答案:

答案 0 :(得分:1)

  

我是否需要确保异步方法中使用的每个方法都是异步的?

不,但如果没有任何异步工作要做,那么让你的WebAPI方法为[HttpPost("api/PostStuff")] public string PostStuff([FromBody] Data data) { foreach (var s in MyStuff.GetStuff() { // for loop that gets data from another class that is not asynchronous } return stuff; } 没有意义:

 public ActionResult Export(int? protocol)
 {
     if(procol!=null)
     {
         // create file
         if (!string.IsNullOrEmpty(csvData))
         {
             return File(new System.Text.UTF8Encoding().GetBytes(csvData), "text/csv", "report.csv");
         }
      }
      return view()
  } 

但这并不能解决您的异常问题。

  

我唯一怀疑的可能是因为我使用的每个方法都不是异步的。

不,这不会导致例外。