首页 > 解决方案 > 使类中的所有方法在c#中的同一线程上运行

问题描述

我想创建具有自己线程的单例,并执行每个方法(假设这是数据库,并且每个添加/修改操作都需要从同一个线程调用),该线程可以在构造函数中创建,我也想要那个该单例中的每个方法都将在该特定线程上执行。

据我了解,新的 System.Threading.Thread.Thread() 使我能够启动线程,但启动后,我无法自由地对它进行下一个工作。如何将新工作排队到该线程?这应该像 myThread.Queue(()=> doWork()); 但我没有看到这样的 api。

标签: c#multithreading

解决方案


下面的简化代码显示了如何做到这一点。TryTake 将无限期地阻塞(或调用 unitl collection.CompleteAdding(),尽管有接受超时值的重载。

        var collection = new BlockingCollection<Action>();

        new Thread(() =>
        {
            while (collection.TryTake(out Action a, -1))
            {
                     a.Invoke();
            }
        }

        }).Start();

推荐阅读