【发布时间】:2015-09-04 07:18:39
【问题描述】:
我有一个控制台应用程序,它调用 Web api 并获取服务列表。然后它循环并调用每个服务。
我有以下:
static int Main(string[] args)
{
...
Task.WaitAll(Process());
}
private static async Task BeginProcess()
{
using(HttpClientHandler handler = new HttpClientHandler())
{
handler.UseDefaultCredentials = true;
using(var client = new HttpClient(handler))
{
var response = client.GetStringAsync(_baseUrl);
List<Service> services = new List<Service>();
services = jss.Deserialize<List<Service>>(response.Result);
client.Timeout = new TimeSpan(0,3,0);
foreach(var service in services)
{
Console.WriteLine("Running " + service.Name);
var _serviceResponse = await client.PostAsync(_baseURL + service.Id.ToString(), null);
Console.WriteLine(service.Name + " responded with " + _serviceRepsonse.StatusCode);
}
}
}
}
不幸的是,此代码按顺序处理每个服务,而不是并行进行调用。问题是,我不确定如何让这些调用并行运行。
【问题讨论】:
-
你需要用
await Task.WhenAll()替换你的循环
标签: c# parallel-processing async-await task