Я использую библиотеку, которая предоставляет набор как foreach
, аналогичный тому, как это делает BlockingCollection
, где мой счетчик будет ждать, пока не появится следующий элемент.Как я могу выйти из перечисления блокировки в .net?
foreach(var item in items)
{
...
}
Мой потребитель будет ждать в течение времени, пока не будет представлен следующий пункт. Он не входит в блок до готовности. Это нормально, но я бы хотел умышленно прекратить перечисление при определенных условиях, даже если я сейчас жду.
Я не спрашиваю о break
внутри блока. Выход из цикла, когда я в блоке, тривиален. Я хочу «отменить» перечисление из другого потока.
Возможно, это не дубликат http://stackoverflow.com/q/23295119/11683 – GSerg
Я думаю, что это поможет прояснить, что вы подразумеваете под «stop перечислением». Поскольку код остановлен, блокировка на следующем элементе, я могу только предположить, что вы говорите об отмене заблокированного перечисления потока из другого потока. Или у вас есть что-то еще? – 31eee384
Поскольку вы пишете, что используете библиотеку, я предполагаю, что вы не контролируете реализацию части «элементов» вашего кода. В этом случае я не думаю, что есть элегантный вариант. Помимо добавления другого слоя косвенности, вы можете вытащить ковер под ним, который будет неуклюжим в лучшем случае - или совершенно опасным, если вы начнете завершать потоки - ваши варианты очень ограничены. –