在没有任务对象的情况下等待所有任务线程

Waiting on All Task Threads without having the Task Object

我有一个使用 .NET 4.0 的应用程序(因此没有可用的 async/await)。我正在为使用服务调用的方法编写测试。

例如,我的测试调用 method AMethod A 有一个异步服务调用 method B,其中 returns 一个 Task,我们在 ContinueWith 中完成所有处理。 Method A returns 没有。

问题是主线程在 ContinueWith 有机会完成之前到达 Assert 调用,因此测试失败。

目前解决这个问题的方法是 Thread.Sleep(10) 以便 ContinueWith 有时间执行。然而,这会带来很多问题,例如浪费时间(当有 hunders - 数千次测试时加起来)到测试在较慢的机器上失败。

我想知道是否有任何方法可以在不实际拥有 Task 对象的情况下执行某种 Thread.WaitAll(),因为无法获取它们。 更改代码不是一个选项,因此必须从测试中完成。

注意:如果我们有 Task/Thread 对象,我知道执行此操作的方法,但我无权访问它们,所以请不要将其标记为那些不是的副本。

I would like to know if there is any way to do a sort of Thread.WaitAll() without actually having the Task objects as there's no way to get them.

不,没有可靠的方法。