在没有任务对象的情况下等待所有任务线程
Waiting on All Task Threads without having the Task Object
我有一个使用 .NET 4.0
的应用程序(因此没有可用的 async
/await
)。我正在为使用服务调用的方法编写测试。
例如,我的测试调用 method A
。 Method 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.
不,没有可靠的方法。
我有一个使用 .NET 4.0
的应用程序(因此没有可用的 async
/await
)。我正在为使用服务调用的方法编写测试。
例如,我的测试调用 method A
。 Method 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.
不,没有可靠的方法。