在任务并行库周围是否有一个接口包装器,以便我可以将其换出进行单元测试?

Ste*_*unn 3 .net multithreading unit-testing task-parallel-library

我刚才问了这个问题.我现在知道这是一个坏主意,并且应该抽象封装任务的调度和运行,以便可以从单元测试中传入同步调度程序.

我目前使用的是使用任务并行库(TPL)的代码,我想ITaskScheduler在我的类型中注入一些东西来提取调度的责任,并使我能够在我的测试中传递同步替代方案.

这样的事情存在吗?我正在寻找包装Task.Factory.StartNew和包装的东西Task.ContinueWith.我不认为它没有太多的工作推出自己的,但我敢肯定有很多小的陷阱,我真的不希望花时间做,如果有一个已经可用.

Ian*_*cer 5

代入Task类是硬的,即使你继承一个新的类Task:因为TaskSchedulerTaskFactory不一般的上Task它也不会有多大效果的.

根据我的经验,更好的方法是使用自己的TaskScheduler类(继承自TaskScheduler).您可以将它传递给TaskFactory构造函数,然后TaskFactory在整个过程中使用它.

现在进行测试可以使用具有不同TaskScheduler并行度的不同(如果需要,可以使用不到1个线程),并且可以在TaskScheduler类中添加额外的日志记录,以便在启动和完成时记录每个任务.