Si j'utilise System.Threading.Task
pour exécuter des tâches parallèles comme ceci:System.Threading.Task Attendez doute
Func<MyResult> func=ComputeResult;
var t = Task.Facroty.StartNew<MyResult>(ComputeResult, 1);//1 is some id
t.Wait();
var tt = Task.Facroty.StartNew<MyResult>(ComputeResult, 2);
tt.Wait();
Will t.Wait()
bloc instruction suivante.
Si je commence quelques tâches dans une boucle et que je veux les attendre toutes de telle sorte que les tâches à l'intérieur de la boucle ne se bloquent pas, mais une instruction après que la boucle soit bloquée.
J'utilise construction suivante:
var tasks=new List<Task<MyResult>>();
Func<MyResult> func=ComputeResult;
for(int i=0; i<10;i++)
{
var t=Task.Facroty.StartNew<MyResult>(ComputeResult, i);
tasks.Add(t);
//t.Wait(); //SHOULD I CALL WAIT HERE?
}
//OR THIS BETTER OR EVEN IF THIS WORKS
foreach(var t in tasks)
{
t.Wait();
}
//do other stuff
EDIT: - En forme finale, je suis en utilisant la ligne suivante au lieu de la dernière boucle foreach
.
Task.WaitAll(tasks.ToArray());
bonne suggestion. Les Ids proviennent de datatable et vont essayer ça demain. Je n'ai pas besoin de 'ToArray', mais je pourrais avoir besoin de prendre en charge l'annulation. – TheVillageIdiot