我是新来的异步编程,并试图编写一些测试代码,看看我能用它做些什么。如何知道所有的异步/等待完成?
下面是我的测试控制台应用程序代码,调用一个异步方法,它会将一些现有的.docx文件发布到我的web api并转换为pdf。
static void Main(string[] args)
{
//async testing - 5 files batch
Console.WriteLine("Job Start:");
for (int i = 0; i < 5; i++)
{
var filestream = File.Open(@"c:\pdftest\" + i.ToString() [email protected]".docx", FileMode.Open);
//delegate
Action act = async() =>
{
await test(filestream, i.ToString());
filestream.Dispose();
};
act();
}
Console.WriteLine("End.");
Console.ReadLine();
}
和方法:
static async Task<int> test(FileStream fs, string id)
{
var content = new StreamContent(fs);
var client = new HttpClient();
var startTime = DateTime.Now;
//post to web api
var response = await client.PostAsync("http://localhost:50348/PDFConvert/Convert?name=" + id, content);
var ts = DateTime.Now - startTime;
Console.WriteLine("Time Cost: " + ts.TotalSeconds.ToString() + " seconds, " + response.Content.ReadAsStringAsync().Result.Replace("\"", ""));
client.Dispose();
return 0;
}
它的工作原理,到目前为止,但一个问题是 “结束”。在控制台窗口的“Job Start:”后面打印,然后等待输出。
所以我的问题是:
1.如何在所有异步/等待完成后打印“结束”消息?
2.不确定这是否是最佳做法,因此对现有代码的任何建议?
非常感谢。
它适合我,谢谢。 – blk25t
@ blk25t那么你应该标记接受的答案。 –