J'ai un problème avec l'efficacité d'un threadpool. Je ne suis pas sûr de comprendre le concept dans son ensemble. J'ai beaucoup lu avant de poser cette question et je sais que le threadpool est une bonne solution si vous avez beaucoup de petites tâches relativement rapides à exécuter. fonctions Et, ce qui est plus important, des tâches non bloquantes. Utilisation de lock
est très mauvais dans le threadpool.
Et voici ma question : Comment retourner les valeurs du threadpool fonctions ? Si vous avez fonctions pour fonctionner, ils doivent probablement produire des résultats, non ? Il est bon de stocker ces résultats quelque part. Où ?
Je suis en train de courir vers les 200 000 dollars très rapidement. fonctions dans un pool de threads. Les résultats que je stocke dans le List
. Bien sûr, je dois le faire :
lock(lockobj)
{
myList.Add(result);
}
Alors, est-ce que c'est la bonne méthode ? Je veux dire, si votre fonctions retourne QUELQUE CHOSE, vous devez les stocker dans une sorte de collection. Il faut que ce soit une collection bloquante. Donc, j'ai commencé à penser... "Le blocage est très perlé dans le threadpool, mais vous devez le faire, au moins une fois - à la fin de chaque fonction.
Comment stocker/renvoyer les résultats de fonctions fonctionnant dans le pool de threads ?
Merci ! JB
EDIT : Par "fonction" Je veux dire...
ThreadPool.QueueUserWorkItem(state =>
{
Result r = function(); // previously named "Task"
lock(lockobj)
{
allResults.Add(r);
}
}