Comment vider une BlockingCollection
J'ai un fil ajout d'éléments à une BlockingCollection
.
Sur un autre fil, je suis en utilisant
foreach (var item in myCollection.GetConsumingEnumerable())
Si il y a un problème je veux sortir de mon foreach et ma méthode et effacer tout ce qui est à gauche dans le BlockingCollection
cependant je ne peux pas trouver un moyen de le faire.
Des idées?
source d'informationauteur Jon
Vous devez vous connecter pour publier un commentaire.
Éventuellement utiliser la surcharge de
GetConsumingEnumerable
qui prend unCancellationToken
et puis si quelque chose va mal depuis la production de côté, il peut annuler le consommateur.Je suis en utilisant cette méthode d'extension:
Je me demandais si il y a un mieux, moins hacky, solution.
Cela a fonctionné pour moi
Take()
supprime de la collection, et vous pouvez appeler n'importe quel nettoyage de votre objet et de la condition de la boucle ne pas invoquer de blocage des appels.Il suffit de prendre tous les éléments restants:
Je suppose que vous signifie clairement de votre blocage de la collection. Jon réponse est plus approprié à votre question, je pense.
Pour juste compensation de la collection, vous pouvez faire:
ou tout simplement