En parallèle.Invoke() sans attendre sur l'exécution à la finition
S'il vous plaît sais que je suis au courant de ce Parallèle.Invoke() est conçu pour la synchronisation des tâches. Ma question est: est-ce
Est-il possible d'appeler une méthode anonyme en utilisant quelque chose comme Parallèle.Invoquer dans l'appel à ne PAS attendre l'exécution à la fin?
Je pensais le point de l'ensemble de l'exécution en parallèle (ou en parallèle invokation) est de ne PAS avoir à attendre la fin de la tâche. Si vous voulez attendre pour un morceau de code pour terminer l'exécution, au lieu d'utiliser en Parallèle.Invoquer, pourquoi ne pas simplement appeler directement le code? Je suppose que je ne comprends pas le point de Parallèle.Invoquer. La documentation dit juste ce il fait, mais ne mentionne aucun des cas d'utilisation, lorsque cela serait plus utile que de simplement appeler directement le code.
OriginalL'auteur Anshul | 2014-01-29
Vous devez vous connecter pour publier un commentaire.
Bien normalement vous auriez du appeler
Parallel.Invoke
avec plusieurs pièces de travail. Si vous exécuter ces travaux dans la série, ça va (probablement) prendre plus de temps que de les exécuter en parallèle."Exécuter en parallèle" n'est pas la même chose que "exécuter en arrière-plan" - vous semblez être à la recherche pour le dernier, mais ce n'est pas ce
Parallel.Invoke
.Si vous voulez juste de lancer les tâches, utiliser
Task.Run
(ouTask.Factory.StartNew
avant .NET 4.5).Parallel.Invoke
est spécifiquement pour l'exécution d'un tas d'actions en parallèle, mais alors en attente de ces actions parallèles à compléter.Comme un exemple concret, vous pouvez effectuer un tri par partitionnement, puis, de manière récursive le tri des deux côtés du pivot en parallèle. Cela rendra l'utilisation de plusieurs cœurs, mais vous devriez vous voulez encore d'attendre jusqu'à ce que toute sorte avaient terminé avant de continuer.
L'exécution en parallèle est tout simplement l'utilisation de plusieurs cœurs pour atteindre un but. Que être fait dans une "fire and forget", mais il n'est pas toujours le cas. Voir mon edit pour prendre un exemple concret, lorsque c'est utile pour paralléliser les travaux sans en faire une tâche en arrière-plan.
Si j'ai les 2 en Parallèle.Invoque sequeunce, ne serait pas le 2ème attendre jusqu'à ce que le premier est terminé d'être appelé? Dans ce cas, comment voulez-vous exécuter les multiples morceaux de code en parallèle en utilisant en Parallèle.Invoquer?
ces deux opérations s'exécutent en parallèle, mais Parallèle.Invoke va attendre les deux d'entre eux à la fin. Supposons que leur temps d'exécution sont
t1
ett2
.Parallel.Invoke
va attendremax(t1,t2)
secondes.Qui fait sens aujourd'hui. J'ai juste eu la mauvaise idée dans ma tête à propos de ce Parallèle.Invoke est censés pour le faire.
OriginalL'auteur Jon Skeet
Simplement envelopper votre
Parallel.Invoke
appel à unTask
si vous ne voulez pas attendre la fin.Bien sûr, vous devez démarrer une nouvelle tâche pour chaque action que vous souhaitez exécuter en parallèle.
Compris. Semble que j'ai été mal à comprendre les raisons derrière Parallèle.Invoke().
Si vous cherchez simplement à exécuter une action sur un thread d'arrière-plan, créer une tâche pour cette action.
Parallel.Invoke
est si vous voulez exécuter plusieurs actions simultanémentet puis synchroniser après leur exécution
OriginalL'auteur Moho
Vous cherchez quelque chose de ce genre?
Exécution en arrière-plan:
Exécution en arrière-plan avec le blocage, très semblable à
Parallel.Invoke
:comment vous utilisez dépend de l'appelant. J'ai mis à jour la réponse à l'illustrer. Théoriquement,
Task.Factory.StartNew(() => Parallel.Invoke(actions))
serait de créer un fil plus que laParallelInvokeAsync(actions)
ci-dessus.OriginalL'auteur noseratio