Sto lavorando su un'applicazione C# multithread che sta consumando un servizio Web WCF. La connessione al webservice avrà un timeout specifico che possiamo definire e dopo il quale verrà chiuso. Sto cercando di memorizzare la connessione al servizio web utilizzando la classe singleton. Sto cercando di ottenere l'istanza come segue:Singleton pigro in un'applicazione C# multithreaded
CLazySingleton ins = CLazySingleton.Instance;
string connection = CLazySingleton.abc;
Di seguito si riporta il codice per la classe Singleton:
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;
}
}
}
}
}
Le mie domande sono: 1. Sarebbe questo codice in grado di prendersi cura di più thread che cercano di ottenere l'istanza allo stesso tempo? Questa è attualmente la mia più grande preoccupazione. 2. Posso avere una soluzione migliore per questo? 3. Devo usare il "blocco" qui o l'approccio Lazy si occupa dei multithread che cercano di ottenere l'istanza?
Qualsiasi aiuto sarebbe apprezzato.
Grazie!
Dai un'occhiata a questo articolo di Jon Skeet. Fa un buon lavoro nel discutere il modello Singleton. http://www.yoda.arachsys.com/csharp/singleton.html – juharr
Ho qualche dubbio sul tuo approccio. Perché è necessario mantenere un Singleton per la connessione? C'è un problema se ogni thread ha il proprio proxy/connessione? E poiché si tratta di un servizio web, non prevedo alcun problema se crei molte connessioni. --- Per capire meglio qual è il tipo di oggetto che è la tua 'connessione'? – thewpfguy
non è necessario il blocco – Rafa