Есть примерно такой код:
static void SomeMethod()
{
var val = new SomeClass();
Queue.Enqueue(val);
Trace.WriteLine($"Queue: {Queue.Count}");
}
static readonly ConcurrentQueue<SomeClass> Queue = new ConcurrentQueue<SomeClass>();
И в результате получаем вывод:
Queue: 0
Как такое может происходить? А то у меня что-то ни одной идеи. Метод, в данном случае, вызывается ровно один раз.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Здравствуйте, hardcase, Вы писали:
H>Между вызовами Enqueue и get_Count кто-то в соседнем потоке успел опустошить очередь.
Других вариантов нет? Сам код корректен?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Здравствуйте, CoderMonkey, Вы писали:
CM>Как такое может происходить? А то у меня что-то ни одной идеи. Метод, в данном случае, вызывается ровно один раз.
https://dotnetfiddle.net/1sImZf
Все работает as expected.
Попробуй
static readonly ConcurrentQueue<SomeClass> InternalQueue = new ConcurrentQueue<SomeClass>();
static readonly ConcurrentQueue<SomeClass> Queue {get {return InternalQueue;} }
И повесь брекпойнт/логи на Queue.get
И сразу увидишь кто мешает тебе жить.