/ / Ako spúšťať pozadie na pozadí, keď moja fronta má niečo spracovať - ​​c #, multithreading, producer-consumer, concurrent-queue

Ako spúšťať pozadie na pozadí, keď moja fronta má niečo spracovať - ​​c #, multithreading, producer-consumer, concurrent-queue

používam ConcurrentQueue na ukladanie správ z viacerých vlákien.

Ako vytvoriť nejaké pozadie vlákna, ktoré sa automaticky spustí, keď môj front niečo obsahuje?

odpovede:

0 pre odpoveď č. 1

Môžete začať pracovnú niť s Thread.Sleep () v nej a po spánku sa opýtať, či má vaša fronta počítať> 0.

Môžete dať inicializačný kód vlákno do konštruktora triedy alebo inicializačnej metódy.

    ...
var queue = new ConcurrentQueue<T>(); //Use your generic type for T
var thread = new Thread(() => WorkOnQueue(queue));

thread.IsBackground = true;
thread.Name = "My Worker Thread";
thread.Start();
...


private void WorkOnQueue(ConcurrentQueue queue)
{
var pause = TimeSpan.FromSeconds(0.05);
while (!abort) // some criteria to abort or even true works here
{
if (queue.Count == 0)
{
// no pending actions available. pause
Thread.Sleep(pause);
continue;
}

DoWork(); //Contains the TryDequeue ...
}
}