我正在尝试从控制台应用程序向web api发送100条消息。但是在将消息发送到web api之前程序正在结束。如果我把Console.ReadLine();
放在最后就可以了。任何人都可以帮我解决这个问题吗?
我已经发布了我在下面使用的代码。
static void Main(string[] args)
{
CreateLog();
}
private static void CreateLog()
{
for(int i=0;i<100;i++)
ProcessLog(new LogMessage() { });
}
private static void ProcessLog(LogMessage message)
{
//Post message to web service
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(@"web api url");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpContent contentPost = new StringContent(
JsonConvert.SerializeObject(message),
Encoding.UTF8,
"application/json");
client.PostAsync("api/xxx", contentPost);
}
答案 0 :(得分:1)
在所有线程完成工作之前,进程退出。当进程退出所有线程时关闭。您唯一可能的是等待此任务完成其工作。方法Wait
可以用来做到这一点。
var result = client.PostAsync("api/xxx", contentPost);
result.Wait();
修改强>
当您想要并行运行某些任务然后等待它们进行消毒时,您可以使用ContinueWhenAll
。
List<Task> tasks = new List<Task>();
for(bla; bla; bla) {
//run client posts async
tasks.Add(client.PostAsync(bla, bla));
}
XYZ()
Task.Factory.ContinueWhenAll(tasks.ToArray(), (Task[] tasks) => {
// run action when all are done
});
或者您可以使用WaitAll
或WhenAll
方法。
XYZ()
Task.WaitAll(tasks.ToArray()):
// or
await Task.WhenAll(task.ToArray());
可以找到关于这两种方法的更多详细信息here。