我有一个基本的任务执行队列(与 3 个独立系统对话的 c# WinForms App)。一切都很好,直到其中一个 Web 服务决定不以通常的速度响应。
我对通过多线程作业加快速度不感兴趣,但现在我在生产中使用它,我可以看到至少有两个线程运行作业的好处 - 如果一个阻塞并且它是异常,另一个会保持卡车,如果两者都阻塞,那么可能会有任意数量的线程,而我只是处理它。
所以,问题是:这是我刚刚描述的一种常见模式吗,是否有该模式的名称和/或一些很棒的参考或框架,或者任何可以帮助我不重新发明任何轮子的东西。
基于评论/答案的补充
这些任务可以同时运行。出于速度的目的,我选择不仔细研究多线程设计,但我现在正在考虑在面对不常见的任务延迟时获得一致的性能。
我的假设是,每隔一段时间,对 Web 服务的调用就会花费不成比例的更长的时间来完成,同时仍然被认为是非异常的。如果平均执行时间为 1 秒(包括大量不同的 Web 服务调用)和 Web 服务所用时间的 0.0001%,那么这对 N 个作业的总运行时间的影响可以忽略不计。 15秒回复。
线程池是否只是另一种说法,“启动工作线程并手动管理它们的状态”?或者有什么东西可以帮助我管理复杂性?我担心在这种情况下引入错误的机会与收益不成比例......
我想我正在寻找类似于线程池的东西,但只有在检测到延迟时才会启动额外的线程。
如果有人可以给我更多关于其中一条评论所指的工作窃取线程的信息,那听起来很有希望。
我没有使用 BackgroundWorker 组件的原因是因为它们似乎是为您知道需要多少工人的情况而构建的,而且我最好保持设计的灵活性
PS:再次感谢。谢谢!