2013-06-21 17 views
6

Đây là một câu hỏi hai phần:gì thuộc tính "hiện tại" chảy với ExecutionContext

  1. Ai đó có thể cung cấp một danh sách các thuộc ASP.NET/.NET mà thường là thread địa phương mà chảy với ExecutionContext?

    HttpContext.Current? Thread.CurrentContext? Thread.CurrentPrincipal? Thread.CurrentCulture?

    Tôi có thể tính những thuộc tính nào trên/còn tồn tại không đồng bộ/chờ đợi?

    Còn gì nữa?

  2. Có cách nào để thêm thông tin ngữ cảnh cụ thể của ứng dụng sẽ tự động chạy với ExecutionContext không? Một cái gì đó như

    var ec = ExecutionContext.Capture(); 
    ec.CustomContext["MyCustomContext"] = ACustomContext; 
    
+1

Bạn đang thực sự cố gắng làm gì? Tại sao bạn cảm thấy cần phải lưu trữ một bối cảnh tùy chỉnh? –

+0

Nếu bạn có hai câu hỏi riêng biệt, * bạn nên đặt hai câu hỏi *. – svick

+0

@ReedCopsey, tôi đang cố gắng cấu trúc lại một số mã kế thừa sử dụng ThreadStatic và cơ chế lưu trữ cục bộ luồng khác để nó sẽ phát đẹp với async/await. –

Trả lời

13

Các nguồn lực tốt nhất cho điều này là ExecutionContext vs. SynchronizationContext bởi Stephen Toub. Không có danh sách các thuộc tính như những gì bạn đang tìm kiếm.

ASP.NET thực sự sử dụng SynchronizationContext để dòng HttpContext.Currenttreats Thread.CurrentPrincipal rather oddly.

Bạn có thể thêm ngữ cảnh của riêng mình bằng cách sử dụng LogicalSetData/LogicalGetData. Tuy nhiên, bạn chỉ nên lưu trữ dữ liệu không thay đổi được. Tôi ghi lại tài liệu này on my blog.

+0

Cảm ơn (đối với LogicalSetData/LogicalGetData). Tôi đã đọc từng bài viết bạn đã đề cập, nhưng nó vẫn còn mở câu hỏi về dòng chảy của bối cảnh khung công tác. Có vẻ như điều gì đó quan trọng đối với tài liệu ... –

+0

@JoeEnzminger: BTW, tôi không * đề xuất * dữ liệu nhận/tập hợp logic. Nó chỉ * có thể * để sử dụng nếu bạn không thể tìm thấy một giải pháp khác. Tôi chưa chạy điểm chuẩn nhưng tôi mong đợi nó sẽ chậm hơn nhiều so với 'ThreadStatic'. Các đối số phương thức rõ ràng hoặc các trường thể hiện sẽ là giải pháp lựa chọn của tôi. –

+1

+1. Thật thú vị khi thấy những gì thực sự được lưu chuyển, mặc dù không có giấy tờ: http://referencesource.microsoft.com/#mscorlib/system/threading/executioncontext.cs#3a777fa35a9f1ffe. Đặc biệt thú vị cách bối cảnh đồng bộ hóa được lưu thông qua 'ExecutionContext.Run', nhưng không ngầm. – Noseratio

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