c# - 使类中的所有方法在c#中的同一线程上运行
问题描述
我想创建具有自己线程的单例,并执行每个方法(假设这是数据库,并且每个添加/修改操作都需要从同一个线程调用),该线程可以在构造函数中创建,我也想要那个该单例中的每个方法都将在该特定线程上执行。
据我了解,新的 System.Threading.Thread.Thread() 使我能够启动线程,但启动后,我无法自由地对它进行下一个工作。如何将新工作排队到该线程?这应该像 myThread.Queue(()=> doWork()); 但我没有看到这样的 api。
解决方案
下面的简化代码显示了如何做到这一点。TryTake 将无限期地阻塞(或调用 unitl collection.CompleteAdding()
,尽管有接受超时值的重载。
var collection = new BlockingCollection<Action>();
new Thread(() =>
{
while (collection.TryTake(out Action a, -1))
{
a.Invoke();
}
}
}).Start();
推荐阅读
- input - 尝试制作 NDI 网络摄像头输入(虚拟输入)的第二个实例
- delphi - 使用 Delphi 的 HTML5 画布动画
- reactjs - 反应条件渲染
- mysql - Mysql - 带有重音符号的 Concat 字符串会导致格式错误的字符
- javascript - Firefox中的D3升高和降低svg元素不起作用
- amazon-web-services - 使用 ARN 创建 aws s3clinet 时出现问题,承担 s3 存储桶的角色
- javascript - 角度导航问题
- c# - 为 Axis2 Web 服务创建客户端时对传输和消息使用不同的证书
- javascript - Vue.js:如何更改 Vue2-slider 组件的颜色
- python - Tensorflow 未在 RTX 3060 Ti 上检测到 GPU