В C # при переопределении метода разрешается делать асинхронное переопределение, когда исходный метод не был. Это похоже на плохую форму.
Пример, который привел меня к этому, был следующим - меня привели, чтобы помочь с проблемой нагрузочного теста. Около 500 одновременно работающих пользователей процесс входа в систему будет нарушен в цикле перенаправления. IIS регистрировал исключения с сообщением «Асинхронный модуль или обработчик завершены, пока асинхронная операция еще не завершена». Некоторые поиски привели меня к мысли, что кто-то злоупотребляет async void
, но мои быстрые поиски по источнику ничего не смогли найти.
К сожалению, я искал 'async \ svoid' (поиск по регулярному выражению), когда мне следовало искать что-то более похожее на 'async \ s [^ T]' (предполагая, что Задача не была полностью квалифицирована ... Вы понимаете, в чем дело).
То, что я позже нашел, было async override void onActionExecuting(...
в базовом контроллере. Очевидно, что это должно быть проблемой, и это было. Исправление этого (сделав его синхронным на данный момент) решило проблему.
Вернемся к вопросу: почему вы можете пометить переопределение как асинхронное, когда вызывающий код не может его ожидать?
Task
.