如果我有方法:
public async Task<string> Get()
{
Task<string> a = _db.GetSomething();
Task<string> b = _db.GetSomethingElse();
await Task.WhenAll(a, b);
return a.Result + b.Result;
}
我没有完全控制_db
中的代码,并希望以编程方式验证他们是否在内部使用非阻塞io。是的,他们已经转换为基于Task
的api,但是可以使用Task.Factory.StartNew
轻松完成,并且仍然使用下面的阻止IO。在这种情况下,这将是不受欢迎的。
我可以访问代码,所以我可以看到他们确实在内部使用Task Factory,因此反编译并不是我想要的。理想情况下,我可以编写一个单元测试来验证前进的线程行为。
有没有办法可以在某个方面检查各个点的工作线程数,并验证这些子任务中的线程是否被阻塞?
答案 0 :(得分:2)
您应该能够使用Microsoft Fakes(Ultimate only IIRC)或JustMock来捕获对Task.Factory.StartNew
的呼叫。就个人而言,我认为这种努力不值得。
如果你不关心在代码中这样做,你可以(有点)使用Concurrency Visualizer(或PerfView)轻松地看到它。