QueryWorker — это класс, а QueryWorker.Next — это поле QueryWorker.
Это поставит Writer в очередь и поставит его последним в очереди.
Возвращает true, если вы первый в очереди.
Вы видите какие-либо проблемы с этим? Это только для постановки в очередь, всплывающая часть является единственным потребителем и поэтому не требует блокировки.
internal bool TryStartWriting(QueryWorker Writer)
{
QueryWorker? Last;
do
{
Last = WriterQueueHead;
while (Last is null)
{
if (Interlocked.CompareExchange(ref WriterQueueHead, Writer, null) is null)
return true;
Last = WriterQueueHead;
}
while (Last.Next is not null)
Last = Last.Next;
} while (Interlocked.CompareExchange(ref Last.Next, Writer, null) is not null);
WriterQueueHead = Writer;
return false;
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... -with-this