c# – 从多个线程到一个同步线程的调度工作

c# – 从多个线程到一个同步线程的调度工作,第1张

概述假设我有10个线程忙着做某事他们有时会调用一个方法 public HandleWidgets(Widget w) { HeavyLifting(w) } 但是,我不希望我的10个线程在HeavyLifting(w)上等待,而是将HeavyLifting(w)工作分配给第11个线程,即HeavyLifter线程并以异步方式继续.调度的HeavyLifter线程应该始终是同一个线程,我不想创建多个线 假设我有10个线程忙着做某事他们有时会调用一个方法
public HandleWidgets(Widget w) {  Heavylifting(w) }

但是,我不希望我的10个线程在Heavylifting(w)上等待,而是将Heavylifting(w)工作分配给第11个线程,即Heavylifter线程并以异步方式继续.调度的Heavylifter线程应该始终是同一个线程,我不想创建多个线程(因此,我不能做这样的事情:C# Asynchronous call without EndInvoke?).

Heavylifting(w)是“发射并忘记”,因为调用HandleWidgets()的线程不需要回调或类似的东西.

这有什么健康的做法?

解决方法 基本上你有线程是工作的生产者,而一个线程是它的消费者.

创建一个线程并在循环中从BlockingCollection获取它.这是你的消费者线程,它将调用Heavylifting.它只会等到一个项目可用,然后处理它:

A call to Take may block until an item is available to be removed.

其他线程可以简单地将项添加到集合中.

请注意,BlockingCollection不保证自行添加/删除项目的顺序:

The order in which an item is removed depends on the type of collection used to create the BlockingCollection instance. When you create a BlockingCollection object,you can specify the type of collection to use

总结

以上是内存溢出为你收集整理的c# – 从多个线程到一个同步线程的调度工作全部内容,希望文章能够帮你解决c# – 从多个线程到一个同步线程的调度工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1251762.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存