我有一个与内部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()的循环中收集的数据使用非任务或异步的方法。
我是否需要确保异步方法中使用的每个方法都是异步的?
谢谢!
答案 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()
}
但这并不能解决您的异常问题。
我唯一怀疑的可能是因为我使用的每个方法都不是异步的。
不,这不会导致例外。