У меня есть приложение, которое использует коллекцию, в данном случае очередь, из разных потоков. Объект ставится в очередь в одном потоке, а другой удаляется из очереди в другом потоке.
Эти действия могут выполняться одновременно, что приведет к возникновению исключения, такого как исключение аргумента вне диапазона, когда счетчик коллекций переопределяется.
Я ищу красивый и правильный, чтобы исключить эти действия одно из другого.
что я имею в виду под хорошим внешним видом, так это то, что я не хочу создавать свою собственную коллекцию, производную от этой, которая включает механизм блокировки (объекта)
Я не хочу использовать идею мозгового штурма, которая у меня была, которая довольно уродлива.
enqueueOk = false;
while (!enqueueOk)
{
try
{
Qsockets.Enqueue(currentSoc);
enqueueOk = true;
}
catch { }
}
Я думал, конечно, использовать блокировку или мьютекс, но это будет иметь место только в том случае, если я оберну эти действия в процедуру, которая будет вызываться из каждого потока, и решу либо поставить в очередь, либо удалить из очереди, что также было бы долго и уродливо
edit:
потому что никто не видит мой ответ внизу
Я просто использовал механизм блокировки на самой коллекции
lock(Qsockets)
{
Qsockets.Enqueue(currentSoc);
}