In C#, when you override a method, it is permitted to make the override async when the original method was not. This seems like poor form.
The problem that makes me wonder is this: I was brought in to assist with a load test problem. At around 500 concurrent users, the login process would break down into a redirect loop. IIS was logging exceptions with the message "An asynchronous module or handler completed while an asynchronous operation was still pending". Some searching led me to think that someone was abusing async void, but my quick searches through the source found nothing.
Sadly, I was searching for async\s*void (regex search) when I should have been looking for something more like async\s*[^T] (assuming Task wasn't fully qualified.. you get the point).
What I later found was async override void onActionExecuting in a base controller. Clearly that had to be the problem, and it was. Fixing that up (making it synchronous for the moment) resolved the problem.
But it left me with a question: Why can you mark an override as async when the calling code could never await it?
asyncis not a part of a method signature is important programming knowledge. Even if it was offtopic, you should have not cross-posted it.asyncis allowing you to useawaitinside of your method. It doesn't mean that your async method itself has to be awaited. So not being able to await an async method isn't a concern