2010-09-08 20 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

相关问题