Для доступа к данным:
Для таких данных, как Server.Identity.Name, я думаю, что сбор этой информации заранее и передача ее вашему асинхронному коду — хороший подход. Его хорошая развязка, поскольку этот код теперь зависит только от этих нескольких свойств.
Для доступа к поведению:
Как вы используете потоки с ASP.NET? Работают два подхода: реализовать и зарегистрировать IAsyncHttpHandler или вызвать Page.AddOnPreRenderCompleteAsync() с какой-либо страницы ASP.NET.
Для IAsyncHttpHandler реализуемому вами обратному вызову передается HttpContext. Вы должны иметь возможность использовать этот ссылочный контекст из любого потока, пока вы не укажете ASP.NET, что обработка запроса завершена. Конечно, вы должны использовать эту ссылку только из одного потока за раз.
Для Page.AddOnPreRenderCompleteAsync должно быть безопасно вызывать Page.Context из ваших обратных вызовов при тех же условиях.
Для существующего кода в App_Code, который использует HttpContext.Current, вам необходимо реорганизовать его, чтобы код принимал HttpContext в качестве входного параметра. Существующий код может передаваться в HttpContext.Current, новый код, который вы пишете из потоков, может передаваться в одном из контекстов, описанных ранее в этом ответе.
person
Frank Schwieterman
schedule
26.07.2009