0

我想向 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);
}

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

谢谢。

4

1 回答 1

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);

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

于 2013-06-23T08:06:01.087 回答