【发布时间】:2012-12-13 00:33:05
【问题描述】:
我有一个创建任务和延续任务的 WebService。
在第一个任务中我们设置Thread.CurrentPrincipal
因此,当 ContinuationTask 启动时,它不再具有 Thread.CurrentPrincipal。
我想在 ContinuationTask 中指定它应该在与其前项相同的线程中运行。
我在网上搜索过,但我只发现了线程在 SynchronizationContext 中运行的要求,因此我开始认为我缺少一些基本规则,特别是关于 Thread.Principal 应该如何工作的规则。
【问题讨论】:
-
将任务绑定到线程是一个坏主意,并且在出现异常时容易出错。与其修复线程的主体并要求所有任务使用同一线程,不如尝试将 WindowsIDentity 或令牌对象作为状态传递给任务,并在每个任务中模拟用户。否则,如果发生异常并且忘记清除身份,您将面临更改 ThreadPool 身份的风险
-
附言。您使用的是什么类型的身份? WindowsIdentity 还是其他?
-
我们实现了自己的 IPrincipal,并且是应用程序本身进行身份验证。似乎最好的办法是在任务中传递 IPrincipal。
标签: c# task-parallel-library impersonation