HttpWebRequest.BeginGetResponse blocks your thread synchronously.

HttpWebRequest.BeginGetResponse は、非同期メソッドのくせにスレッドをブロックする。






The BeginGetResponse method requires some synchronous setup tasks to complete (DNS resolution, proxy detection, and TCP socket connection, for example) before this method becomes asynchronous. As a result, this method should never be called on a user interface (UI) thread because it might take some time, typically several seconds. In some environments where the webproxy scripts are not configured properly, this can take 60 seconds or more. The default value for the downloadTime attribute on the <webProxyScipt> config file element is one minute which accounts for most of the potential time delay.






参考情報は Why does HttpWebRequest GetResponse block for such a long time?

If the server is genuinely taking a long time to return any data (as shown in Fiddler) then that's the cause of it. Uploading an 85MB attachment would take a long time to start with, and then the server has to process it. You can't do a lot about that - other than to use an asynchronous method if you're able to get on with more work before the call returns.