I would like to know the reasoning behind the way the compiler choose the TaskScheduler when compiling using the async keyword.
My test method is called by SignalR (
One of the primary guidelines in writing async
code is "avoid async void
" - that is, use async Task
instead of async void
unless you're implementing an async
event handler.
async void
methods use SynchronizationContext
's OperationStarted
and OperationCompleted
; see my MSDN article It's All about the SynchronizationContext for more details.
ASP.NET detects the call to OperationStarted
and (correctly) rejects it because it's illegal to put an async
event handler there. When you correct the code to use async Task
, then ASP.NET no longer sees an async
event handler.
You may find my intro to async / await post helpful.