2017-05-09 59 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

直指點。謝謝。 –