Как насчет того, чтобы использовать drb? Это не реальная многопоточность, но коммуникация между несколькими процессами, но можно использовать его теперь в 1,8, и это - довольно низкое трение.
Самая большая разница в том, что они не обязательно должны быть одинаковыми.
Вообще говоря, HttpContext.Current.User
является пользователем входа в систему (когда он вызывается в рабочем потоке), а Thread.CurrentPrincipal
- идентификатор рабочего процесса.
В IIS 5.x для Thread.CurrentPrincipal
по умолчанию используется ASPNET
. В IIS 6 и выше для Thread.CurrentPrincipal
по умолчанию используется Network Service
(или удостоверение пула приложений, на которое вы меняете).
Чтобы усложнить задачу, если вы включите олицетворение ASP.NET, тогда они оба могут быть такими же, как и зарегистрированный пользователь.
Попробуйте прочитать несколько действительно хороших книг по этой теме и статей Microsoft MSDN,
http://msdn.microsoft.com/en-us/library/ms998351. aspx
Еще одно предложение - использовать отладчик для подключения к рабочему процессу и проверки их во время выполнения. Это может дать вам лучший обзор.
Обратите внимание, что
HttpContext.Current.User
не лучший способ запроса идентификация пользователя входа в систему. Вы должны придерживатьсяPage.User
для веб-форм иController.User
для MVC иApiController.User
для веб-API.
Еще одно большое отличие состоит в том, что ваш код не всегда имеет доступ к HttpContext. (Например, если у вас есть весь ваш BL в сборке, которая может или не может использоваться из веб-приложения) Хотя эти две учетные записи пользователей могут быть разными, если вы используете Thread.CurrentPrincipal, тогда ваш код всегда сможет получить в этом пользовательском объекте независимо от того, где вы находитесь в своем коде.