Using “async” (even if it should complete) as part of a MVC route deadlocks the route; how can this be avoided?

前端 未结 3 436
悲哀的现实
悲哀的现实 2020-12-24 08:45

Consider the following (based on the default MVC template), which is a simplified version of some \"stuff\" that happens in the background - it completes fine, and shows the

3条回答
  •  情歌与酒
    2020-12-24 09:16

    When you use .Result there is always a possibility of deadlock because .Result is blocking by nature. The way to avoid deadlocks is to not block on Tasks (you should use async and await all the way down). The subject is in details described here:

    • Don't Block on Async Code

    One fix is to add ConfigureAwait:

    public static async Task IndirectSlowDouble(long val)
    {
        long result = await SlowDouble(val).ConfigureAwait(false);
    
        return result;
    }
    

提交回复
热议问题