У меня есть ASP. NET приложение WebForms, в котором есть страницы, использующие Async=True
, и я использую RegisterAsyncTask(new PageAsyncTask(InitialiseAsync));
в моем OnLoad
методе для асинхронного вызова бизнес-логики c.
Теперь я знаю, ASP. NET WebForms требует асин c вызовов, за которыми следует ConfigureAwait(true)
, так как он должен вернуться к исходному контексту синхронизации, чтобы завершить sh страницу. Однако цепочка вызовов asyn c переходит в библиотечную сборку (также созданную нами). Библиотека не должна ни знать, ни заботиться о syn c контекстах, чтобы выполнять свою асинхронную работу. Кроме того, его можно (потенциально) использовать в других контекстах, таких как консольное приложение.
Поэтому:
- , если методы библиотеки всегда используют
ConfigureAwait(true)
(в случае, если оно используется контекстно-зависимым приложением, таким как ASP. NET Web Forms) ?; или - можно ли использовать методы библиотеки
ConfigureAwait(false)
и приложение WebForms ConfigureAwait(true)
?; или - (я уверен, что это не ответ, но ...) я должен передать в библиотеку логическое значение, указывающее, использовать ли
ConfigureAwait(true)
или ConfigureAwait(false)
?
Я использовал опцию 1 до сих пор, но теперь я подозреваю, что мне следует использовать опцию 2, чтобы код библиотеки мог await
вернуться в любой поток , и приложение в конечном итоге будет работать переключение контекста обратно в поток контекста required при возврате стека вызовов.
Это правильно? Спасибо