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

时间:2017-05-09 12:37:49

标签: c# multithreading asynchronous c#-4.0 continuewith

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

例如,我的测试调用method AMethod Amethod B进行异步服务调用,返回Task,我们会在ContinueWith中执行所有处理。 Method A不返回任何内容。

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

目前解决此问题的方法是Thread.Sleep(10),以便ContinueWith有时间执行。然而,这会带来很多问题,例如浪费时间(在有猎人的情况下会增加数千次测试),以便在较慢的机器上进行测试失败。

我想知道是否有任何方式可以做Thread.WaitAll()而没有实际拥有Task个对象,因为无法获取它们。更改代码不是一个选项,因此必须从测试中完成。

注意:如果我们有Task / Thread个对象,我知道这样做的方法,但是我无法访问它们,所以请不要将它标记为副本因为它不是。

1 个答案:

答案 0 :(得分:1)

  

我想知道是否有任何方法可以执行某种Thread.WaitAll()而不实际拥有Task对象,因为没有办法获取它们。

不,没有办法可靠地做到这一点。