Tôi đang sử dụng ASP.Net Web API 2/.Net 4.5.2.Giữ lại chính bên trong mục công việc nền xếp hàng đợi
Tôi đang cố giữ lại tên gọi chính khi xếp hàng một mục công việc nền. Cuối cùng, tôi đang cố gắng để:
Thread.CurrentPrincipal = callingPrincipal;
Nhưng khi tôi làm như vậy, tôi nhận được một ObjectDisposedException:
System.ObjectDisposedException: xử lý an toàn đã bị đóng cửa
thế nào thế nào để giữ nguyên hiệu trưởng hiện tại bên trong mục công việc nền?
Tôi có thể tạo bản sao của hiệu trưởng bằng cách nào đó không?
public void Run<T>(Action<T> action)
{
_logger.Debug("Queueing background work item");
var callingPrincipal = Thread.CurrentPrincipal;
HostingEnvironment.QueueBackgroundWorkItem(token =>
{
try
{
// UNCOMMENT - THROWS EXCEPTION
// Thread.CurrentPrincipal = callingPrincipal;
_logger.Debug("Executing queued background work item");
using (var scope = DependencyResolver.BeginLifetimeScope())
{
var service = scope.Resolve<T>();
action(service);
}
}
catch (Exception ex)
{
_logger.Fatal(ex);
}
finally
{
_logger.Debug("Completed queued background work item");
}
});
}
Bạn có thực sự cần 'Thread.CurrentPrincipal' hoặc bạn thực sự cần' HttpContext.User'? Có lẽ giải thích lý do tại sao bạn cần phải truyền dòng hiệu trưởng như thế. –
Lý do đằng sau việc giữ Nguyên tắc hiện tại trong Chủ đề nền là gì? – Win
Ví dụ: để lấy một số dữ liệu cá nhân tốn rất nhiều thời gian. – VMAtm