我正在使用TPL,但是我发现它使用了棘手的单元测试代码。是否有一种方法来限制任务并行库使用的线程?
我试图不要introduce a wrapper,因为我觉得它可能会引入问题。
我知道你可以在TPL中设置处理器亲和力,但真正好的是设置线程最大值(可能是每个应用程序域)。因此,将线程最大值设置为1时,TPL将被强制使用任何线程。
您认为如何?这是可能的(我敢肯定它不是),应该它有可能吗?
编辑:这里有一个例子
public class Foo
{
public Foo()
{
Task.Factory.StartNew(() => somethingLong())
.ContinueWith(a => Bar = 1) ;
}
}
[Test] public void Foo_should_set_Bar_to_1()
{
Assert.Equal(1, new Foo().Bar) ;
}
测试可能将无法通过,除非我引入一个延迟。我想要有类似Task.MaximumThreads=1
的东西,这样TPL将连续运行。
我怀疑你正在做错事情。你想要做什么? – 2010-08-24 03:32:10
基本上,我希望我的代码在测试时顺序运行,以便在单元测试中不会结束睡眠。 – 2010-08-24 09:18:42
在某些情况下,您可能能够使用Task.WaitAll()让您的测试等待,直到任务完成,然后您可以断言状态。在其他人中,将逻辑从任务中提取出来并严格按照顺序进行测试可能是正确的做法。如何用一个具体的例子来更新你的问题,我可以尝试提供一个解决方案。 – 2010-08-24 19:42:14