Comment démarrer une liste & lt; Tâche & gt; en parallèle?
J'ai un objet qui renvoie un System.Threading.Tasks.Task
:
public class MyClass
{
public Task GetTask(object state, CancellationToken cancellationToken)
{
return new Task(Execute, state, cancellationToken);
}
public void Execute(object context)
{
//do stuff
}
}
Ailleurs, j'ai un List<MyClass>
donc je ne le suit pour obtenir un List<Task>
:
var myTaskList = myClassList.Select(p => p.GetTask(null, cancellationToken)).ToList();
Maintenant que j'ai le List<Task>
comment puis-je commencer toutes en même temps? Est-il une manière plus concise ce code?
Merci!
source d'informationauteur user833115xxx
Vous devez vous connecter pour publier un commentaire.
Qu'entendez-vous par "démarrer en parallèle"? Lorsque vous exécutez le
Task
il s'exécute sur un autre thread, tu veux sans doute dire simplement:Mais si vous avez beaucoup d'entre eux que vous souhaitez déplacer de départ logique pour un autre thread, vous pouvez soit appeler le code ci-dessus dans un autre thread/tâche (je suis en utilisant
List<T>.ForEach
pour de courtes code).Ou vous pouvez utiliser TPL du
Parallel.ForEach
. Qui serait encore bloquer le thread qui s'exécute jusqu'à ce que toutes les Tâches sont commencé, mais il va exécuter l'action de démarrage sur un document interne de pool de threads, donc, pour un grand nombre d'éléments et libre de cœurs/threads, il peut accélérer le démarrage considérablement.Je suis peut-être un malentendu à votre question, mais n'est-il pas juste d'appeler Démarrer sur chaque tâche?
D'attente pour toutes les tâches de finition: