我正在开发一个使用 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.我需要在这里使用'lock'还是使用Lazy方法来处理试图获取实例的多线程?
任何帮助,将不胜感激。
谢谢 !