Skip to content

Work Dependency

ZjzMisaka edited this page Nov 19, 2024 · 2 revisions

如果设置了 WorkOption.Dependents, 直到所有依赖的任务执行完毕, 该任务都不会开始.

string id0 = powerPool.QueueWorkItem(() =>
{
    // Do something
});
string id1 = powerPool.QueueWorkItem(() =>
{
    // Do something
});

powerPool.QueueWorkItem(() =>
{
    // Do something
},
new WorkOption()
{
    Dependents = new ConcurrentSet<string>() { id0, id1 }
});

线程池只会保存失败任务的信息, 并且当线程池进入空闲状态并重新开始时, 失败任务的记录将被清除, 除非将 PowerPoolOption.ClearFailedWorkRecordWhenPoolStart 设置为 false.
通常情况下, 如果一个任务准备执行但是它依赖的任务未能完成, 则不应允许该任务执行.
如果 PowerPoolOption.ClearFailedWorkRecordWhenPoolStarttrue, 为了防止由于失败信息的丢失导致线程池错误地允许任务开始, 可以使用 PowerPool.EnablePoolIdleCheck 暂时停止线程池的空闲检查, 直到该任务被添加到线程池中.