【发布时间】:2015-12-08 15:12:17
【问题描述】:
我阅读了this 问题,但答案和讨论让我自己感到困惑。
所以我决定检查一下,但我该怎么做呢?如何创建一个测试来证明HttpWebClientProtocol class 是否为Thread Safe?
我已经做了以下测试:
- 创建一个
HttpWebClientProtocol来调用一个WS。 - 我自己创建了 WS,里面只有一个
Thread.Sleep(30000)。 - 所以我创建了两个独立的
threads来同时调用这个HttpWebClientProtocol。 - 结果是:
threads都调用了 WS 没有问题。 (一个thread不需要等待第一个通话结束)
通过这个测试,我是否证明了对象 IS Thread Safe 和另一个问题的“正确”答案是错误的??
【问题讨论】:
-
在这里理解有什么问题? “不。它不是线程安全的。客户端必须处于打开状态才能启用调用。一个简单的场景是一个线程执行 client.Close() 而另一个线程尝试调用方法将失败。”简单地说,不,不是。如果你想测试它,你应该阅读多线程以及如何使用它。但你也应该知道,这样的测试不是很可靠
-
你读过MSDN documentation中的线程安全吗?
-
第二个@mikus 说的。即使某些东西不是线程安全的,您也可以运行数十个测试,并且不能保证它会出现任何问题。多线程是一件棘手的事情,您可能会在测试中得到不一致的行为。
标签: c#