我想向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);
}
但这似乎没有发送请求(不执行数据库操作)。有没有真正简单的解决方案?
感谢。
答案 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);
(您应该检查是否需要订阅任何其他事件以便在失败时处理它 - 我不记得在这种情况下事件是否仍然被触发。)