And*_*mar 5 c# multithreading async-await c#-5.0
我们有一个webservice函数,它在后台运行一系列任务.当所有任务完成后,它将返回.我重新考虑了C#5的功能.我设法让以下代码段工作:
var result = new List<int>();
var tasks = new List<Task<int>>();
foreach (var row in rowlist)
tasks.Add(Task.Factory.StartNew(() => DoWork(row)));
foreach (var task in tasks)
result.Add(task.Result);
Run Code Online (Sandbox Code Playgroud)
该task.Result做的单个任务等待.我已经通过向DoWork方法添加三秒延迟并在不到5秒的时间内验证它完成测试,以获得10个任务的列表.
现在我尝试使用新async / await语法重写函数.但我似乎无法让它发挥作用.如果它编译,它会同步运行,通过添加等待验证.
关于如何使用重写上述代码段的任何想法async / await?
我会这样写:
var tasks = rowlist.Select(row => Task.Run(() => DoWork(row)));
var results = (await Task.WhenAll(tasks)).ToList();
Run Code Online (Sandbox Code Playgroud)
基本上,您仍然可以按照以前的方式创建任务(不使用await),因为您希望它们全部立即启动.然后,您可以等待所有这些异步(通过await Task.WhenAll)完成,然后立即取出结果(因为您知道它们已完成).