C#:异步运行此代码的不同方法?

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)运行

Ree*_*sey 8

我个人最喜欢的是:

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)


Ani*_*Ani 5

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.