It appears possible for a PUT request to enter a state where a timeout does not correctly fire.  The asyncresult of the request is correctly passed into the SetTimeout method after creation but when it progresses to the response object the SetTimeout is neglected.

This allows for a scenario where a put request can begin and if an error occurs in the response the client can remain unaware as the timeout is not called and therefore the callback never completes.  I have seen this behaviour on a mobile device where the connection is dropped during a PUT request that takes a few seconds to return.