有没有办法验证没有线程阻塞
本文关键字:线程 验证 有没有 | 更新日期: 2023-09-27 18:33:16
如果我有一个方法:
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。在这种情况下,这是不可取的。
可以访问代码,所以我可以看到他们确实在里面使用任务工厂,所以反编译并不是我真正想要的。理想情况下,我可以编写一个单元测试来验证线程行为。
有没有办法以某种方式检查各个点的工作线程计数,并验证线程是否在任何这些子任务中被阻止?
您应该能够使用 Microsoft Fakes(仅限 Ultimate IIRC)或 JustMock 来捕获对Task.Factory.StartNew
的调用。就个人而言,我认为付出的努力是不值得的。
如果您不关心在代码中执行此操作,则可以(在某种程度上)使用并发可视化工具(或 PerfView)轻松查看它。