【问题标题】:C# WebClient UploadStringAsync takes time to execute sometimeC# WebClient UploadStringAsync 需要时间来执行
【发布时间】:2016-10-14 22:08:07
【问题描述】:

我手头有一个相当令人困惑的问题。尝试将一些 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,在第一次调用时,Step Over 在 UploadStringAsync 处挂起 2-3 秒,但在第二次调用时它只是跳转在它上面(应该)。

.php 文件位于同一台服务器上。 任何想法为什么同一个调用在 2 个调用中的行为不同,UploadStringAsync 不应该在所有情况下都是异步的?

【问题讨论】:

  • 你确定服务器第二次没有缓存结果吗?

标签: c# asynchronous webclient


【解决方案1】:

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

wc.Proxy = null;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    相关资源
    最近更新 更多