【发布时间】:2011-02-08 07:13:34
【问题描述】:
我被 .NET 4 中引入的代码协定深深吸引(尽管在 DevLabs 的帮助下)。但是一张精美的印刷品让我冷静了很多。它是这样说的:
- 当后置条件在线程安全方法中在锁之外调用时,除了不使用它们之外,目前没有解决此问题的方法。
- .NET 依赖于二进制重写器,因此构建速度较慢。
- 使用代码协定也可能会导致运行时性能下降。
- 不能用于安全敏感检查,因为它们可以在运行时通过处理 ContractFailed 事件来规避。
对我来说最大的是第一个。我不知道是否有人再编写单线程应用程序。所以如果代码契约不能支持多线程,我看不到它们的用途。或者也许我不应该对此感到太大压力,因为后置条件用于断言方法本身的内部,可以进行单元测试。
顺便说一句,我没有找到任何东西,也没有尝试反汇编我的代码来查看先决条件的注入位置。我想在一个简单的方法中,当 lock() 首先出现时,在它之后注入检查很简单,但是在一个相当复杂的方法中,当锁定发生在中间的某个地方时,这可能是一个问题。或者如果使用了 lock() 以外的其他机制。
【问题讨论】:
标签: c# multithreading .net-4.0 code-contracts