我手边有一个相当混乱的问题。试图将一些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);
我在同一台服务器上发布2个php文件,相同的JSON(期望不同的结果)。
当我发布到第一个文件时,我在控制台中得到了这个:
Async time: 2576
当我发布到另一个时,我在控制台中得到了这个:
Async time: 0
我发送的JSON非常简单{"user":"bob","action":"get"}
调试时,我在wc = new WebClient();
放置一个断点,然后逐行逐行,在第一次调用时,Step Over在UploadStringAsync
挂起2-3秒,但在第二次叫它只是跳过它(因为它应该)。
.php文件位于同一台服务器上。
任何想法为什么同一个调用在2个调用中表现不同,并且在所有情况下都不应该UploadStringAsync
异步?
答案 0 :(得分:0)
在阅读完这个主题后,我得出了一些结论: 从这个答案Why does WebClient.DownloadStringTaskAsync() block ? - new async API/syntax/CTP
wc.Proxy = null;
这解决了问题,第一个请求现在降到10-15ms,这是可以接受的。 第一个请求中的小延迟似乎是DNS解决问题,它仍然按照以下步骤同步运行: C# async methods still hang UI