我正在使用ASP.Net Web API 2/.Net 4.5.2。保留隊列中的主體內部工作項
我試圖在排隊後臺工作項目時保留調用委託人。爲此,我想:
Thread.CurrentPrincipal = callingPrincipal;
但是,當我這樣做,我得到一個的ObjectDisposedException:
System.ObjectDisposedException:安全句柄已關閉
如何我是否將當前的委託人保留在後臺工作項目中?
我能否以某種方式製作校長副本?
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");
}
});
}
你確實需要'Thread.CurrentPrincipal',還是你真的需要'HttpContext.User'?也許詳細說明爲什麼你需要像這樣流動當前的委託人。 –
在後臺線程中保留Current Principal的原因是什麼? – Win
例如,獲取一些非常耗時的個人數據。 – VMAtm