如何触发后台线程时,我的队列有东西要处理

本文关键字:处理 队列 我的 后台 何触发 线程 | 更新日期: 2023-09-27 18:14:50

我使用ConcurrentQueue来存储来自多个线程的消息。

如何创建一些后台线程,这将自动触发当我的队列中有东西吗?

如何触发后台线程时,我的队列有东西要处理

你可以用thread . sleep()来启动一个worker线程,在thread . sleep()之后询问你的queue是否有count> 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 ...
        }
    }