WebClient和Tasks没有检索新内容,但有新内容可用

本文关键字:新内容 检索 Tasks WebClient | 更新日期: 2023-09-27 18:05:44

尽管我正在创建WebClient的新实例,并遵循标准程序以确保WebClient被GC删除,这甚至不应该重要:WebClient从我的服务器检索它以前检索的内容,并且只有重新启动应用程序才允许从我的服务器检索新内容。内容是一个简单的文本文件字符串,没有花哨的缓存,因为它可以在WinRT上正常工作。

这是一个谜,因为我正试图做一个ChatBox;我需要刷新以获得新的内容,但WebClient返回它第一次检索的内容。

我代码:

    public async Task<string> RetrieveDocURL(Uri uri)
    {
        return await DownloadStringTask(new WebClient(), uri);
    }
    /*
    public async Task<byte[]> RetrieveImageURL(string url)
    {
        return await _webClient.GetByteArrayAsync(url);
    }
     * */
    private Task<string> DownloadStringTask(WebClient client, Uri uri)
    {
        var tcs = new TaskCompletionSource<string>();
        client.DownloadStringCompleted += (o, e) =>
            {
                if (e.Error != null)
                    tcs.SetException(e.Error);
                else
                    tcs.SetResult(e.Result);
            };
        client.DownloadStringAsync(uri);
        return tcs.Task;
    }

WebClient和Tasks没有检索新内容,但有新内容可用

WebClient的缓存策略真的很激进。如果每次查询相同的URL,应该考虑在末尾添加一个随机参数。比如:

"http://www.yourserver.com/yourService/?nocache=" + DateTime.UtcNow.Ticks