Почему C# позволяет выполнять асинхронное переопределение?C#

Место общения программистов C#
Anonymous
Почему C# позволяет выполнять асинхронное переопределение?

Сообщение Anonymous »

В C# при переопределении метода разрешено сделать переопределение асинхронным, если исходный метод не был таковым. Это похоже на плохой тон.

Проблема, которая заставляет меня задуматься, заключается в следующем: меня пригласили помочь с проблемой нагрузочного теста. При примерно 500 одновременных пользователях процесс входа в систему разбивается на цикл перенаправления. IIS регистрировал исключения с сообщением «Асинхронный модуль или обработчик завершен, пока асинхронная операция все еще ожидалась». Некоторый поиск привел меня к мысли, что кто-то злоупотребляет async void, но мой быстрый поиск по источнику ничего не нашел.

К сожалению, я искал async\s*void (поиск по регулярным выражениям), хотя мне следовало искать что-то вроде async\s*[^T] (при условии, что Task не был полностью квалифицирован.. вы поняли).

Позже я обнаружил асинхронное переопределение void onActionExecuting в базовом контроллере. Очевидно, что проблема заключалась в этом, и так оно и было. Исправление этого (на данный момент сделав его синхронным) решило проблему.

Но у меня остался вопрос: почему вы можете пометить переопределение как асинхронное, если вызывающий код никогда не сможет его дождаться?

Подробнее здесь: https://stackoverflow.com/questions/358 ... ride-async

Вернуться в «C#»