2010-09-08 40 views
1

對不起,怪異的標題。以下是我要做的事情:我應該如何調試 - 檢查將來有效的假設?

我在客戶端代碼中調用服務器上的方法。結果,服務器將發送某些數據給客戶端。我想驗證這些數據是否在一秒內到達,除非出現嚴重錯誤,否則情況一定是這樣。代碼如下所示:

Channel.SendMeData (id); 

new Thread (() => { 
    Thread.Sleep (1100); 
    Debug.Assert (ReceivedData[id] != null); 
}) { 
    IsBackground = true 
}.Start(); 

正如你所看到的,我創建一個新的線程僅用於Debug.Assert荷蘭國際集團,依靠成功的網絡代碼的條件。我不禁想到,由於多種原因,這是非常錯誤的,但我真的不知道如何避免這種情況。當然,我確實編寫過單元測試,但我也喜歡在主代碼中使用斷言。

+0

作爲次要的補充,新的線程可以放在'#if DEBUG'中以限制它在產品中的影響。 – mafu 2010-09-08 12:32:33

回答

1

如果您可以阻止當前線程,則可以在主代碼塊中簡單使用Thread.Sleep(1100);,而無需創建新線程。

如果你不能阻止其他代碼等待這個斷言,那麼它確實需要在你的例子的單獨線程上。

+0

是的,我也考慮過阻塞主線程,但這會a)嚴重限制性能,並且b)是一種醜陋的黑客攻擊。看起來像我必須保持額外的線程:\ – mafu 2010-09-08 12:31:28

4

我不會斷言類似的東西 - 斷言應該是應該始終爲真的事情,並指出一個邏輯錯誤,如果一個失敗,例如循環/類不變量。在這種情況下,您無法控制是否及時收到響應,因此您應該創建超時並在響應未到期之前發出異常。

+0

有效的聲明,我不應該使用一個斷言的所有這樣的事情。按照提議創建一個單獨的超時看起來是一個更合理的想法。 – mafu 2010-09-08 12:35:41

相關問題