Почему 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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