加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#多线程 – 使用什么方法?

发布时间:2020-12-16 00:12:12 所属栏目:百科 来源:网络整理
导读:我的目标是编写一个程序,根据给定的用户输入处理任意数量的任务. 假设在这种情况下,任务数量为1000. 现在,我希望能够生成动态数量的线程并逐个开始处理任务. 我认为我需要使用“同步”方法,而不是“异步”方法,以便在一个任务出现问题的情况下,我不希望它减
我的目标是编写一个程序,根据给定的用户输入处理任意数量的任务.

假设在这种情况下,任务数量为1000.

现在,我希望能够生成动态数量的线程并逐个开始处理任务.

我认为我需要使用“同步”方法,而不是“异步”方法,以便在一个任务出现问题的情况下,我不希望它减慢其余任务的完成速度.

我将用什么方法来实现上述目标?信号灯?线程池?如何确保线程不会尝试启动已由另一个线程处理的任务? “锁定”会处理这个吗?

我们将非常感谢代码示例和/或指向正确方向的网站链接.

编辑:MSDN Fibonacci示例的问题是waitall方法最多只能处理64个等待.由于1000项任务,我需要更多.如何解决这种情况而不会造成死锁?

解决方法

这些任务是独立的吗?如果是这样,你基本上需要一个生产者/消费者队列或一个自定义线程池,它们对同一个东西实际上是不同的视图.您需要能够将任务放入队列中,并让多个线程能够从该队列中读取.

我在MiscUtil中有一个自定义线程池,或者在我的threading tutorial中有一个简单的(由于年龄而非通用)生产者/消费者队列(大约在this page的一半).

如果这些任务合理地长时间运行,我不会使用系统线程池 – 它会产生比你想要的更多的线程.如果您使用的是.NET 4.0 beta 1,则可以使用Parallel Extensions.

我不太确定你对WaitAll的评论……当你完成所有事情的时候,你想要解决这个问题吗?在生产者/消费者队列的情况下,这可能涉及在队列中有某种“停止”条目(例如,消费线程理解为意味着“退出”的空引用),然后添加“WaitUntilEmpty”方法(应该相当容易实现).请注意,您不需要等到最后一个项目被处理,因为它们都是停止信号……当队列清空时,所有实际工作项目肯定都会被处理掉.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读