2017-05-09 56 views
0

我有一个应用程序使用.NET 4.0(所以没有async/await可用)。我正在为使用服务调用的方法编写测试。等待所有任务线程没有任务对象

因此,例如,我的测试调用method AMethod A有一个异步服务电话method B,它返回Task,我们在ContinueWith做所有处理。 Method A什么也没有返回。

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

目前解决此问题的方法是执行Thread.Sleep(10)以便ContinueWith有时间执行。然而,这带来了很多问题,比如浪费时间(当有人陷入数千次测试时,这会加剧测试失败)。

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

注:我知道的方法来做到这一点,如果我们有Task/Thread对象,但我没有与他们接触,所以请不要将其标记为那些重复的,因为它不是。

+0

我认为你需要在这里做同样的事情,就像你使用'async/await'那样让'Task'冒泡。是否有理由让'Mathod A'无法返回由'ContinueWith'产生的任务,以便调用者可以决定等待呢? – juharr

+1

你不能'方法A'从'ContinueWith'返回'Task'吗? – Euphoric

+0

此外,要指出任务和异步/等待是两个单独的事情。任务是.NET 4.0以来的一部分,可以在不使用异步的情况下使用。它的异步/等待使它更容易使用。 – Euphoric

回答

1

我想知道是否有任何方法可以在没有Task对象的情况下执行某种Thread.WaitAll()方法,因为无法获取它们。

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

+0

直指点。谢谢。 –