que tienen Singleton objeto 'Servicio' y dos métodos para inicializar y liberarlo:¿Por qué la expresión es siempre cierta para 'double-checked-locking'?
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;
}
}
}
}
Para la línea con comentario ReSharper (yo uso la versión 5.1) muestra una advertencia mencionada ...
pregunta 1: ¿Por qué?
Pregunta 2: ¿Por qué no muestra el mensaje "similar" en el método "EnsureServiceIsOpened"?
Gracias.
Es no rompa su código de una sola aplicación roscado - por qué esto una advertencia * * me intriga. :/ – mayu
Porque podría suceder. El análisis de código solo puede ir tan lejos, y es por eso que aparece esta advertencia. – Femaref
No tengo ningún problema con que esto se muestre por Resharper, no creo que deba ser una advertencia. :) – mayu