对于我的 .NET 4.0 项目,我使用的是TaskScheduler
具有有限并发度的自定义(类似于 MSDN 上的LimitedConcurrencyLevelTaskScheduler示例)。它执行的一堆任务会阻塞,同时等待其他一些操作返回结果,然后继续它们的工作。因为很遗憾这个调度器的线程在这段时间内没有任何事情可做,所以我想在一个阻塞时调度另一个任务。
我认为也许 TPL 可以看到任务何时被阻止,然后安排其他事情,但我Monitor.Wait()
对 a 的实验或等待ManualResetEvent
表明情况并非如此。由于我已经在使用自己的任务调度程序,我认为可能有办法明确告诉它安排另一个任务,但我还没有找到任何方法Task
,TaskScheduler
等等。
请注意,延续在这里不起作用,因为我正在执行一项任务。另外,我真的很想避免将任务分成两个,一个等待前任务和一个等待后任务,因为可能有几个点需要等待,并且将它们全部拆分会导致我的原始算法出现一定程度的碎片化这将使其难以维护。我await
想像 Async CTP 这样的东西会有所帮助,但我必须坚持使用 .NET 4。
我是否缺少一些东西来告诉任务调度程序将下一个任务出列,然后在该任务完成后返回到当前任务?