Для примера следующего кода поточно:Являются ли операции linq в параллельных коллекциях потоками безопасными?
ConcurrentQueue<Guid> _queue = new ConcurrentQueue<Guid>();
while(true)
{
for(int y = 0; y < 3; y++)
{
if(y % 3 == 0)
{
System.Threading.Tasks.Task.Run(() => _queue.Enqueue(Guid.NewGuid()));
}
else if (y % 3 == 1)
{
Guid x;
System.Threading.Tasks.Task.Run(() => _queue.TryDequeue(out x));
}
else if(y % 3 == 2)
{
System.Threading.Tasks.Task.Run(() =>
{
if (_queue.Any(t => t == testGuid))
{
// Do something
}
});
}
}
Edit: Видимо название не было достаточно ясно, так обновили пример кода, чтобы включить фактическое многопоточное поведение, да код выше просто образца многопоточного поведения.
Где находится нить? – leppie
У вас может быть это в приложении asp.net, и несколько потоков будут обращаться к нему, если вы не создадите их вручную. – pollirrata
В вашем коде нет многопоточности, но если вы находитесь в многопоточной среде, ConcurrentQueue определенно является хорошим типом для использования, поскольку он обеспечивает безопасный доступ к вашей очереди. – FloChanz