C#WebClient UploadStringAsync需要一段时间才能执行

时间:2016-06-14 09:05:50

标签: c# asynchronous webclient

我手边有一个相当混乱的问题。试图将一些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异步?

1 个答案:

答案 0 :(得分:0)

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

wc.Proxy = null;

这解决了问题,第一个请求现在降到10-15ms,这是可以接受的。 第一个请求中的小延迟似乎是DNS解决问题,它仍然按照以下步骤同步运行: C# async methods still hang UI