我有一個應用程序使用.NET 4.0
(所以沒有async
/await
可用)。我正在爲使用服務調用的方法編寫測試。等待所有任務線程沒有任務對象
因此,例如,我的測試調用method A
。 Method A
有一個異步服務電話method B
,它返回Task
,我們在ContinueWith
做所有處理。 Method A
什麼也沒有返回。
問題是,在ContinueWith
有機會完成測試失敗之前,主線程到達Assert
呼叫。
目前解決此問題的方法是執行Thread.Sleep(10)
以便ContinueWith
有時間執行。然而,這帶來了很多問題,比如浪費時間(當有人陷入數千次測試時,這會加劇測試失敗)。
我想知道是否有任何方法可以做一種Thread.WaitAll()
實際上沒有Task
對象,因爲沒有辦法得到它們。更改代碼不是一個選項,因此必須從測試中完成。
注:我知道的方法來做到這一點,如果我們有Task
/Thread
對象,但我沒有與他們接觸,所以請不要將其標記爲那些重複的,因爲它不是。
我認爲你需要在這裏做同樣的事情,就像你使用'async/await'那樣讓'Task'冒泡。是否有理由讓'Mathod A'無法返回由'ContinueWith'產生的任務,以便調用者可以決定等待呢? – juharr
你不能'方法A'從'ContinueWith'返回'Task'嗎? – Euphoric
此外,要指出任務和異步/等待是兩個單獨的事情。任務是.NET 4.0以來的一部分,可以在不使用異步的情況下使用。它的異步/等待使它更容易使用。 – Euphoric