Je me suis habitué à l'utilisation Parallel.For () dans les extensions parallèles de .Net comme il est un moyen simple de la parallélisation sans avoir à démarrer manuellement et maintenir des fils (qui peut être Checklist). Je cherche maintenant à une boucle infinie (faire quelque chose jusqu'à ce que je le signaler à l'arrêt) que je souhaite paralléliser, il n'y a pas un argument sans surcharge Parallel.For () pour le faire alors je me demandais ce que la meilleure approche serait ici être. En principe, je pouvais faire quelque chose comme: (?)
Func<bool> whileCondFn = () => !_requestStopFlag; ParallelUtils.While(whileCondFn, delegate() { // Do stuff. });
3 Réponses :
Si vous voulez (vraiment) vouloir quelque chose d'infini, vous le souhaitez sur une éventuelle de cœurs possible. Aucun des Ce que vous avez (probablement) besoin est un thread séparé ou une tâche créée avec l'option longueRunning. p>
puis faites-la attendre sur un sémaphore ou en dernier recours, appelez le sommeil () aussi souvent que possible. p> parallel.for ___ code> serait un bon choix. p>
Le contexte de ce problème est que c'est un projet d'exploration de données. Je prends le code d'analyse de données qui fonctionne actuellement indéfiniment (E.G exécuté pendant la nuit, puis signalez-le pour arrêter le lendemain matin) et l'agrandir à plusieurs threads, en tant que tel que je veux que cela fonctionne indéfiniment sur tous les cœurs.
@Locster - Demandez à un fil "infini" qui crée un fil d'enfant à son travail.
Stephen Toub a un message sur Mise en œuvre parallèle pendant Parallèle.foreach . P>
Stephen Toub Post est assez avancé pour un noob comme moi. Un simple exemple d'utilisation de la méthode la mieux / recommandée serait très apprécié.
Est-ce un commentaire ou une réponse?
Le lien est mort
Considérant que c'est infini de demande de calcul, mais vous devez avoir un état fini sur chaque "cycle", je dirais que je changerais une solution avec un externe pour (;;) code> en boucle exécuter un
Parallel.foreach (...) CODE> Appelez sur un changement d'événement / état. Comme un
moniteur code> signal,
événement code> notification, ou quelque chose comme ça ... p>
Y a-t-il un modèle de threading que vous pourriez consommer