Я работаю над многопоточным приложением С#, которое использует веб-службу WCF. Соединение с webservice будет иметь определенный тайм-аут, который мы можем определить, после чего он будет закрыт. Я ищу, чтобы сохранить подключение к веб-службе, используя singleton class. Я пытаюсь получить экземпляр следующим образом:
CLazySingleton ins = CLazySingleton.Instance;
string connection = CLazySingleton.abc;
Ниже приведен код для одноэлементного класса:
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;
}
}
}
}
}
Мои вопросы: 1. Может ли этот код ухаживать за несколькими потоками, пытаясь получить экземпляр одновременно? В настоящее время моя самая большая проблема. 2. Могу ли я получить лучшее решение для этого? 3. Нужно ли здесь использовать "блокировку" или использовать "ленивый" подход, заботясь о многопоточности, пытающихся получить экземпляр?
Любая помощь будет оценена.
Спасибо!