await vs Task.Wait - Deadlock?

后端 未结 3 1584
生来不讨喜
生来不讨喜 2020-11-21 07:09

I don\'t quite understand the difference between Task.Wait and await.

I have something similar to the following functions in a ASP.NET WebA

3条回答
  •  执念已碎
    2020-11-21 07:29

    Some important facts were not given in other answers:

    "async await" is more complex at CIL level and thus costs memory and CPU time.

    Any task can be canceled if the waiting time is unacceptable.

    In the case "async await" we do not have a handler for such a task to cancel it or monitoring it.

    Using Task is more flexible then "async await".

    Any sync functionality can by wrapped by async.

    public async Task DoAsync(long id) 
    { 
        return await Task.Run(() => { return DoSync(id); } ); 
    } 
    

    "async await" generate many problems. We do not now is await statement will be reached without runtime and context debugging. If first await not reached everything is blocked. Some times even await seems to be reached still everything is blocked:

    https://github.com/dotnet/runtime/issues/36063

    I do not see why I'm must live with the code duplication for sync and async method or using hacks.

    Conclusion: Create Task manually and control them is much better. Handler to Task give more control. We can monitor Tasks and manage them:

    https://github.com/lsmolinski/MonitoredQueueBackgroundWorkItem

    Sorry for my english.

提交回复
热议问题