假设我有以下循环应尽快执行:
while(true)
{
A();
B();
C();
}
遵守以下规则:
B()只能在A()完成后启动,C()只能在B()完成后启动
B()很有可能是多线程的。
如果我在B()中创建新线程来分割工作,那么与非并行解决方案相比,它执行得更慢!
我认为这是线程创建的开销
我创建了一个变体,其中B()的并行线程是在while(true)循环之外创建的
每个线程都有一个布尔值来表示它已完成,每个线程都有一个布尔值,用于表示线程有新的工作要做。
线程和C()正在等待它们继续使用以下片段:
while(!boolean)
Thread.Sleep(1);
当B()的工作非常小时,这比其他变体慢。当B()具有预期的最大工作量时,与其他变体相比更快。
这种布尔等待方法似乎非常低效且愚蠢......
不推荐使用threadInstance.Resume()。
我很确定这是错误的方式。
什么是我的问题的正确解决方案?
我听说过线程池和任务。这是我应该研究的内容吗?
我避免使用这些概念,因为在阅读它们时我无法快速理解它们。
答案 0 :(得分:3)
任务。阅读任务。
任务完成后b中的所有任务,后跟C完成。
你尝试解决很久以前使用Task API解决的问题(在.NET 4.0时间框架中,我认为)。
答案 1 :(得分:0)
正如@TomTom所说,Task API是正确的选择。
Task API在.NET 4.0中引入并在.NET 4.5中得到了改进。对于以前的.NET版本Asynchronous Programming Model (APM)将是正确的方法。