WinHttpResponseStream.CancelPendingResponseStreamReadOperationis trying to acquire a lock, which is already held by the first thread - the one waiting for the cancellation callback to complete. So, classic deadlock. I can't reproduce this reliably, but I found it while running System.Net.Http...