async keyword and choice of the TaskScheduler

前端 未结 2 1172
忘掉有多难
忘掉有多难 2021-01-02 12:30

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 (

2条回答
  •  天涯浪人
    2021-01-02 13:00

    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.

提交回复
热议问题