Ich arbeite an einer Multithread-C# -Anwendung, die einen WCF-Webdienst verwendet. Die Verbindung zum Webservice wird ein bestimmtes Timeout haben, das wir definieren können und nach dem es geschlossen wird. Ich suche, um die Verbindung zum Webservice mit Singleton-Klasse zu speichern. Ich versuche, die Instanz zu erhalten, wie folgt:Lazy Singleton in einer Multithread-C# -Anwendung
CLazySingleton ins = CLazySingleton.Instance;
string connection = CLazySingleton.abc;
Unterhalb der Code für die Singleton-Klasse ist:
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, Pflege mehrerer nehmen Threads versuchen, die Instanz zur gleichen Zeit zu erhalten? Dies ist derzeit meine größte Sorge. 2. Kann ich eine bessere Lösung dafür haben? 3. Muss ich hier 'lock' verwenden oder verwenden Lazy Ansatz kümmert sich um Multithreads versuchen, die Instanz zu bekommen?
Jede Hilfe wäre willkommen.
Danke!
Sie in diesem Artikel von Jon Skeet. Es macht eine gute Arbeit, das Singleton-Muster zu diskutieren. http://www.yoda.arachsys.com/csharp/singleton.html – juharr
Ich habe einige Zweifel an Ihrem Ansatz. Warum müssen Sie einen Singleton für die Verbindung aufrechterhalten? Gibt es ein Problem, wenn jeder Thread seinen eigenen Proxy/Verbindung erhält? Und da es sich um einen Webdienst handelt, sehe ich keine Probleme, wenn Sie viele Verbindungen erstellen. --- Um besser zu verstehen, welche Art von Objekt deine Verbindung ist? – thewpfguy
Sie brauchen die Sperre nicht – Rafa