Async call with await in HttpClient never returns

Check out this answer to my question which seems to be very similar.

Something to try: call ConfigureAwait(false) on the Task returned by GetStreamAsync(). E.g.

var result = await httpClient.GetStreamAsync("weeklyplan")
                             .ConfigureAwait(continueOnCapturedContext:false);

Whether or not this is useful depends on how your code above is being called – in my case calling the async method using Task.GetAwaiter().GetResult() caused the code to hang.

This is because GetResult() blocks the current thread until the Task completes. When the task does complete it attempts to re-enter the thread context in which it was started but cannot because there is already a thread in that context, which is blocked by the call to GetResult()deadlock!

This MSDN post goes into a bit of detail on how .NET synchronizes parallel threads – and the answer given to my own question gives some best practices.

Leave a Comment