Кто-нибудь знает, если при итерации на C# BlockingCollection <> элементы берутся из коллекции так же, как это делает BlockingCollection.Take()?Удаляет ли foreach из C# BlockingCollection?
BlockingCollection<int> q = new BlockingCollection<int>();
[...]
foreach(int i in q)
{
//does q still contain i?
}
Благодаря
EDIT: Конечно, я имел в виду BlockingCollection, но по какой-то причине у BlockingQueue в моей голове, и использовал это.
И на самом деле, если я не ошибаюсь, манипулирование коллекцией внутри foreach запрещено и будет терпеть неудачу во время выполнения. –
@Bartdude - правильный –
Это просто неправда. Рассмотрим, например, использование 'foreach' с [' BlockingCollection .GetConsumingEnumerable() ') (http://msdn.microsoft.com/en-us/library/dd287186%28v=vs.110%29.aspx). проблема заключается в том, что поскольку 'foreach' просто вызывает методы в' IEnumerator ', эффект зависит от конкретной реализации' IEnumerator ', который вызывается, поэтому вы не можете претендовать на то, что будет влиять на использование' foreach'. –