我有單獨的對象「服務」和兩個方法來初始化和釋放:爲什麼表達對於'雙重檢查鎖定'總是正確的?
public class BaseService
{
protected static readonly object StaticLockObject = new object();
}
public abstract class WebServiceBase<TService> : BaseService
where TService : System.Web.Services.Protocols.SoapHttpClientProtocol, new()
{
protected static void EnsureServiceIsOpened()
{
if (Service == null)
{
lock (StaticLockObject)
{
if (Service == null)
{
Service = new TService();
}
}
}
}
protected static void EnsureServiceIsClosed()
{
if (Service != null)
{
lock (StaticLockObject)
{
if (Service != null) // Why expression is always true
{
Service.Dispose();
Service = null;
}
}
}
}
對於有評論ReSharper的(我用5.1版)顯示一個警告提到的行...
問題1:爲什麼?
問題2:爲什麼它在'EnsureServiceIsOpened'方法中不顯示「類似」消息?
謝謝。
它不會破壞你的代碼單線程應用程序 - 爲什麼一個*警告*我感到困惑。 :/ – mayu 2013-06-10 02:19:36
因爲可能會發生。代碼分析只能走得這麼遠 - 這就是出現此警告的原因。 – Femaref 2013-06-10 19:50:26
我沒有問題,這是由Resharper顯示,我不認爲這應該是一個警告。 :) – mayu 2013-06-11 02:28:41