【发布时间】:2014-02-04 19:31:34
【问题描述】:
我有一个包含多个静态方法的静态类。
private static Session _session = new Session();
public static void Method1() {
if(_session != null)
_session.Action();
}
public static void Method2() {
if(_session != null)
_session.Action();
}
public static void Method3() {
if(_session != null)
_session.Action();
}
public static void Method4(string path) {
_session.Disconnect();
_session.Connect(new Config(path));
}
Method1、Method2、Method3 是完全线程安全的,可以从任意数量的线程安全地同时调用它们。其实出于性能考虑,我需要允许多个线程同时调用Method1,2,3。
问题是,Method1,2,3 有可能在 Method4() 被调用时抛出异常。 如何在调用 Method4() 时允许多个线程调用 Method1,2,3 同时阻塞它们?
【问题讨论】:
-
听起来你需要一个 ReaderWriterLock。
-
为什么将会话设置为空?为什么不直接将会话设置为新会话?
-
Servy - 我可能过于简化了我的示例,但 Method4() 基本上是:session.Disconnect() 和 session.Connect(newConfig)。虽然发生这种情况,但我不希望 Method1、2、3 调用 Action()。
-
我个人更喜欢使用 Rx.Net 的 RefCountDisposible。
标签: c# multithreading