2012-04-08 20 views
6

Tôi có một lớp yêu cầu thiết lập Danh sách động. Tôi cũng gọi lớp này 10 hoặc nhiều lần khác nhau bằng cách sử dụng Threading.Cách tạo Danh sách <string> {get; set;} cho mỗi chủ đề,

public static List<string> MyList {get;set;}

Tôi mới đến luồng, tuy nhiên, như tôi đã nói điều này là không an toàn. Câu hỏi tôi có là làm cách nào để tạo một phiên bản MyList cho mỗi chuỗi?

Ví dụ sẽ tuyệt vời!

+1

Đó là những trường hợp dành cho. Nếu bạn thực sự phải có một cá thể trên mỗi luồng thì hãy giữ một từ điển danh sách của bạn theo id luồng hoặc lưu trữ cục bộ luồng. –

+1

Bạn đang cố gắng làm gì? Có một sự khác biệt lớn giữa việc có một trường tĩnh và có một cá thể cho mỗi luồng. Nó không chỉ là một cái gì đó bạn thay đổi vì vấn đề luồng. Nó cũng ảnh hưởng đến cách dữ liệu được chia sẻ giữa các luồng. –

+0

@MarkByers Những gì tôi muốn làm, là khi tôi sử dụng song song của tôi cho mỗi, tôi chạy một truy vấn mysql cụ thể dựa trên kết quả từ một 'void' trước đó. Những kết quả sau đó tạo ra 'MyList' mà phần còn lại của lớp tôi sử dụng để thực hiện chức năng của nó –

Trả lời

8

Sử dụng thuộc tính ThreadStatic.

[ThreadStatic] private static List<string> _myList; 

public static List<string> MyList { 
    get { return _myList; } 
    set { _myList = value; } 
} 

Ngoài ra, thường thì tốt hơn để lớp chứa có quyền kiểm soát bộ sưu tập; điều này có nghĩa là không có bộ hiển thị bên ngoài có thể nhìn thấy và trình thu thập trả về bản sao hoặc bộ sưu tập chỉ đọc.

Nhưng, điều này có thể không ảnh hưởng đến ý định của bạn. Mỗi luồng sẽ có bản sao bộ sưu tập của riêng nó. Có thể điều bạn cần là xem khóa hoặc suy nghĩ lại về thiết kế của bạn.

+0

Tôi muốn mỗi chủ đề chứa bản sao của riêng nó, nó chỉ được đặt một lần và không bao giờ nên được đặt agian, tuy nhiên điều này phải là duy nhất cho mỗi chủ đề –

+0

@Mike: sau đó, 'ThreadStatic' dường như phù hợp với các hóa đơn ... Hãy thử nó . –

+0

sẽ cho đi, đây có thể là một câu hỏi ngu ngốc Tôi thấy [ThreadStatic] rõ ràng là bắt đầu mã bằng cách làm thế nào để tôi biết rằng [Threadstatic] kết thúc ở cuối cùng} của MyList và không ảnh hưởng đến phần còn lại của mã –

Các vấn đề liên quan