.NET异步获取请求 - 不关心响应

时间:2013-06-23 08:03:20

标签: .net asynchronous webclient

我想向Web服务发送请求,我不关心响应。该服务在数据库中执行操作 - 我从一个简单的.NET 4.0控制台应用程序调用它,该应用程序将设置为按计划运行。这有效:

using (var client = new WebClient()) {
    client.UseDefaultCredentials = true;
    client.DownloadString(uri);
}

但阻止线程直到收到响应。我宁愿这样做:

using (var client = new WebClient()) {
    client.UseDefaultCredentials = true;
    client.DownloadStringAsync(uri);
}

但这似乎没有发送请求(不执行数据库操作)。有没有真正简单的解决方案?

感谢。

1 个答案:

答案 0 :(得分:4)

是的,当您立即处置客户端时,异步版本将失败。

您可以不处置客户端:

var client = new WebClient();
client.UseDefaultCredentials = true;
client.DownloadStringAsync(uri);

...或(更好)附加事件以在完成时处置它:

var client = new WebClient();
client.UseDefaultCredentials = true;
client.DownloadStringCompleted += delegate { client.Dispose(); };
client.DownloadStringAsync(uri);

(您应该检查是否需要订阅任何其他事件以便在失败时处理它 - 我不记得在这种情况下事件是否仍然被触发。)