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
我手头有一个相当混乱的问题。尝试 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