【发布时间】:2015-09-01 19:51:39
【问题描述】:
我有一个 WebService,它拥有一个 Singleton:
public class WebService
{
private static Singleton _singleton = Singleton.Instance;
public void DoSomeJob(object jobObj) {
_singleton.QueueJob(jobObj);
}
}
.. 和单例,应该是线程安全的。
public static Singleton Instance
{
get
{
lock (_syncRoot)
{
if (_instance == null)
_instance = new Singleton();
return _instance;
}
}
}
}
我打算以这种方式实现的是,每个调用我的 WebService 的客户端都将其对象提供给同一个单例实例。同样,这个单例实际上并没有做更多的事情,只是在计时器滴答时将对象排队并处理它。
我面临(现在仍然是)的问题是,每次 WebService 终止时单例都会被杀死。但是,我不确定这是否会发生,因为 Singleton 的所有者正在被破坏,或者由于应用程序池设置给出的某种原因。 我试图让应用程序池在空闲时“始终运行”和“暂停”,而不是“按需”和“终止” - 没有成功:-/
为什么单身人士每次都被杀死?如何在 WebService 执行之间保持 Singleton 的实例处于活动状态?
【问题讨论】:
-
实际上,我的帖子是从“大家好”开始的,但它一定是被剪掉了——请原谅 :)
-
小心那些锁。并发请求将锁定在那段代码上。我知道这是您的意图,但并发请求应该是独立的,而不是排队等待轮到它。
-
如果您正在寻找线程安全集合,请尝试一下:msdn.microsoft.com/en-us/library/…
-
@mitch 仅供参考,Stackoverflow 上的礼仪是以常见问题解答的方式撰写您的帖子,而不是论坛帖子或给其他网站用户的信函。考虑到这一点,我稍微编辑了您的问题。
-
@Mihai:谢谢你的链接!但是,你能指出为什么并发请求不应该排队等待吗?我必须承认我并不真正理解这一点。