Tôi đang làm việc trên một ứng dụng C# đa luồng đang tiêu thụ một dịch vụ web WCF. Kết nối với webservice sẽ có thời gian chờ cụ thể mà chúng tôi có thể xác định và sau đó nó sẽ đóng. Tôi đang tìm cách lưu trữ kết nối với dịch vụ web bằng cách sử dụng lớp singleton. Tôi cố gắng để có được các trường hợp như sau:Loài đơn lười biếng trong ứng dụng đa số C#
CLazySingleton ins = CLazySingleton.Instance;
string connection = CLazySingleton.abc;
Dưới đây là mã cho lớp 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;
}
}
}
}
}
Câu hỏi của tôi là: 1. Sẽ mã này có thể chăm sóc nhiều chủ đề cố gắng để có được dụ cùng một lúc? Đây là mối quan tâm lớn nhất của tôi. 2. Tôi có thể có giải pháp tốt hơn cho việc này không? 3. Tôi có cần phải sử dụng 'khóa' ở đây hay sử dụng phương pháp Lazy để xử lý các đa luồng đang cố gắng lấy ví dụ?
Mọi trợ giúp sẽ được đánh giá cao.
Cảm ơn!
Kiểm tra bài viết này của Jon Skeet. Nó làm tốt công việc thảo luận về mẫu Singleton. http://www.yoda.arachsys.com/csharp/singleton.html – juharr
Tôi có một số nghi ngờ về cách tiếp cận của bạn. Tại sao bạn cần phải duy trì một Singleton cho kết nối? Có vấn đề gì nếu mỗi luồng có proxy/kết nối riêng của nó? Và vì đó là một dịch vụ web, tôi không thấy trước bất kỳ vấn đề gì nếu bạn tạo ra nhiều kết nối. --- Để hiểu rõ hơn loại đối tượng là 'kết nối' của bạn là gì? – thewpfguy
bạn không cần khóa – Rafa