0

ConcurrentQueueを使用して、複数のスレッドからのメッセージを保存しています。

キューに何かがあるときに自動的にトリガーされるバックグラウンド スレッドを作成するにはどうすればよいですか?

4

1 に答える 1

0

Thread.Sleep() を使用してワーカー スレッドを開始し、スリープ後にキューのカウントが 0 を超えているかどうかを確認できます。

スレッドの初期化コードをクラスのコンストラクターまたは初期化メソッドに入れることができます。

    ...
    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 ...
        }
    }
于 2016-10-25T07:09:02.027 に答える