Faul singleton in einer Multithread-c# - Anwendung

Arbeite ich an einem Multithread-c# - Anwendung, die nutzen eines WCF web service. Die Verbindung zu dem webservice haben ein bestimmtes Zeitlimit, das wir uns definieren können und danach wird es enger. Ich bin auf der Suche um die Verbindung zu speichern, um die web-service-Nutzung des singleton-Klasse. Ich werde versuchen, die Instanz wie folgt :

CLazySingleton ins = CLazySingleton.Instance;
string connection = CLazySingleton.abc;

Unten ist der code für die singleton-Klasse :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LazySingleton
{
    public class CLazySingleton
    {
        private static readonly Lazy<CLazySingleton> _instance
            = new Lazy<CLazySingleton>(() => new CLazySingleton());
        private static readonly object ThreadLock = new object();
        public static string abc;  
        //I will use the service connection object in place of 'abc' in the application
        //assume that 'abc' is storing the connection object    

        private CLazySingleton()
        { }

        public static CLazySingleton Instance
        {
            get
            {   
                if (abc == null)
                {
                    lock (ThreadLock)
                    {
                        //Make the connection
                        abc = "Connection stored in this variable";
                        Console.WriteLine("Connection Made successfully");
                        return _instance.Value;
                    }                    
                }
                else
                {
                    return _instance.Value;
                }
            }
        }
    }
}

Meine Fragen sind :
1. Würde dieser code in der Lage sein, um zu kümmern, mehrere threads versuchen, um die Instanz in der gleichen Zeit ? Dies ist derzeit meine größte Sorge.
2. Kann ich eine bessere Lösung dafür ?
3. Benötige ich für die Verwendung von 'lock' hier oder über Lazy-Ansatz kümmert sich um multithreads zu versuchen, um die Instanz ?

Jede mögliche Hilfe würde geschätzt.

Dank !

Check out this Artikel von Jon Skeet. Es macht einen guten job, darüber zu diskutieren, das Singleton-Muster. yoda.arachsys.com/csharp/singleton.html
Ich habe einige Zweifel auf Ihrem Ansatz. Warum müssen Sie pflegen ein Singleton für die Verbindung? Ist es ein problem, wenn jeder thread bekommt seinen eigenen proxy/connection? Und da es ein web-Dienst, den ich nicht voraussehen, keine Probleme, wenn Sie viele verbindungen. --- Um besser zu verstehen welche Art von Objekt das ist Ihre "Verbindung"?
Sie brauchen nicht die Sperre

InformationsquelleAutor Anubhav Sharma | 2013-03-05

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.