Bob*_*Bob 3 .net c# vb.net multithreading
我有这个代码
List<string> myList = new List<string>();
myList.AddRange(new MyClass1().Load());
myList.AddRange(new MyClass2().Load());
myList.AddRange(new MyClass3().Load());
myList.DoSomethingWithValues();
Run Code Online (Sandbox Code Playgroud)
什么是运行负载()任意数量的异步方法,然后确保DoSomethingWithValues()的最好办法,当所有异步线程完成(当然没有每一个回调发生时增加一个变量,并等待== 3)运行
我个人最喜欢的是:
List<string> myList = new List<string>();
var task1 = Task.Factory.StartNew( () => new MyClass1().Load() );
var task2 = Task.Factory.StartNew( () => new MyClass2().Load() );
var task3 = Task.Factory.StartNew( () => new MyClass3().Load() );
myList.AddRange(task1.Result);
myList.AddRange(task2.Result);
myList.AddRange(task3.Result);
myList.DoSomethingWithValues();
Run Code Online (Sandbox Code Playgroud)
PLINQ怎么样?
var loadables = new ILoadable[]
{ new MyClass1(), new MyClass2(), new MyClass3() };
var loadResults = loadables.AsParallel()
.SelectMany(l => l.Load());
myList.AddRange(loadResults);
myList.DoSomethingWithValues();
Run Code Online (Sandbox Code Playgroud)
编辑:更改选择按照Reed Copsey指出的SelectMany.