2010-01-21 19 views
6

Có cách nào để tạo các luồng mới sinh kế thừa các giá trị của trạng thái ThreadStatic (hoặc một cái gì đó giống như nó) trên chuỗi chủ của chúng không? Tôi muốn sử dụng (hoặc cái gì đó giống như nó) để thực hiện các biến đặc biệt "động phạm vi" có chứa thông tin ngữ cảnh hoạt động/nhiệm vụ để sử dụng cho việc theo dõi/ghi nhật ký, vv. Đây có phải là cách tiếp cận hợp lý không và có thể thực hiện được không?Thừa kế các giá trị ThreadStatic để thực hiện phạm vi động trong C# /. NET trong ngữ cảnh đa luồng

Trả lời

6

Bạn không thể "kế thừa" giá trị. Tuy nhiên, ThreadLocal<T> class mới cho .NET 4 cho phép bạn cung cấp Func<T> trong constructor, có thể khởi tạo chuỗi dựa trên trạng thái của phụ huynh. Điều này sẽ cung cấp một cách giải quyết hợp lý.

+0

Cảm ơn, điều này thực sự thú vị. Nhưng làm thế nào tôi có thể cho phép đứa trẻ truy cập vào trạng thái của cha mẹ? –

+0

Bạn có thể sử dụng một lambda trong phụ huynh cung cấp quyền truy cập vào (các) biến được đề cập đến để bắt đầu kích hoạt ThreadLocal . Điều này sử dụng một hình thức khởi tạo lười biếng, do đó, lần đầu tiên sử dụng, bạn sẽ nhận được trạng thái của cha mẹ hiện tại. –

+0

điều này đã không làm những gì tôi cần vào thời điểm đó vì một lý do nào đó mà tôi đã quên, nhưng thật tuyệt khi biết điều này. –