C# WebClient UploadStringAsync 有时需要时间执行

C# WebClient UploadStringAsync takes time to execute sometime

我手头有一个相当混乱的问题。尝试 post 一些 JSON 到远程服务器上的一些 .php 文件。

代码如下:

wc = new WebClient();
Uri urlToRequest = new Uri(webserviceUrl + url);

wc.UploadStringCompleted += new UploadStringCompletedEventHandler(wc_DownloadDataCompleted);
wc.Headers.Add(HttpRequestHeader.ContentType, "application/json");

var stopwatch = Stopwatch.StartNew();

wc.UploadStringAsync(urlToRequest, json);

Console.WriteLine("Async time: " + stopwatch.ElapsedMilliseconds);

我正在 post 访问同一服务器上的 2 个 php 文件,相同 JSON(期望不同的结果)。

当我 post 到第一个文件时,我在控制台中得到了这个:

Async time: 2576

当我 post 给另一个我在控制台中得到这个:

Async time: 0

我发的JSON真的很简单{"user":"bob","action":"get"}

调试时,我在 wc = new WebClient(); 处放置了一个断点,然后逐行执行 Step Over,在第一次调用时,Step Over 在 UploadStringAsync 处挂起 2-3 秒,但是第二次调用它只是跳过它(它应该)。

.php 文件在同一台服务器上。 知道为什么同一个调用在 2 个调用中表现不同,并且 UploadStringAsync 不应该在所有情况下都是异步的吗?

在阅读了这个主题之后,我得出了一些结论: 从这个答案 Why does WebClient.DownloadStringTaskAsync() block ? - new async API/syntax/CTP

wc.Proxy = null;

这解决了问题,第一个请求现在减少到 10-15 毫秒,这是可以接受的。 第一次请求的小延迟好像是DNS解析问题,还是按照这个同步运行: C# async methods still hang UI