Несмотря на то, что TPL , подобный предложенному Ральфом ответу, недоступен в Silverlight, мне действительно нравится модель Task ... Так почему бы не написать тонкую оболочку для потоков, которая будет работать аналогично.
using System;
using System.Threading;
using System.Linq;
public class Task {
ManualResetEvent _mre = new ManualResetEvent(false);
public Task(Action action) {
ThreadPool.QueueUserWorkItem((s) => {
action();
_mre.Set();
});
}
public static void WaitAll(params Task[] tasks) {
WaitHandle.WaitAll(tasks.Select(t => t._mre).ToArray());
}
}
Тогда вы можете использовать это как TPL:
int param1 = 1;
int param2 = 2;
Task.WaitAll(
new Task( () => DoSomething(param1, param2) ),
new Task( () => DoSomething(param1, param2) )
);
Под покровом это возлагает на ThreadPool ответственность за ограничение потоков в системе до разумного количества.