使用Parallel.ForEach或Task.Run()异步启动一组任务之间有什么区别?
版本1:
List<string> strings = new List<string> { "s1", "s2", "s3" };
Parallel.ForEach(strings, s =>
{
DoSomething(s);
});
版本2:
List<string> strings = new List<string> { "s1", "s2", "s3" };
List<Task> Tasks = new List<Task>();
foreach (var s in strings)
{
Tasks.Add(Task.Run(() => DoSomething(s)));
}
await Task.WhenAll(Tasks);
另请注意,第二个将执行三次DoSomething(“ s3”),并且不会产生相同的结果! stackoverflow.com/questions/4684320/...
—
无主地
@Dan:请注意,版本2使用async / await,这意味着这是一个不同的问题。在写入可能的重复线程1.5年后,VS 2012引入了Async / await。
—
Petter T
Task.WaitAll
而不是,则第二个代码片段将几乎等于第一个代码片段Task.WhenAll
。