私は、WCF Web サービスを使用しているマルチスレッドの c# アプリケーションに取り組んでいます。Web サービスへの接続には、定義可能な特定のタイムアウトがあり、その後閉じられます。シングルトン クラスを使用して Web サービスへの接続を保存しようとしています。次のようにインスタンスを取得しようとしています:
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.ここで「ロック」を使用する必要がありますか、それともレイジーアプローチを使用してインスタンスを取得しようとするマルチスレッドを処理しますか?
どんな助けでも大歓迎です。
ありがとう !