3

MSDN 文档WebClient.DownloadDataAsync列出了两个可能来自调用该方法的潜在异常。

例外:

  • ArgumentNullException - 地址参数为空。
  • WebException - 由 BaseAddress 和地址组合形成的 URI 无效。- 或 - 下载资源时出错。

虽然我不怀疑这些异常可能在调用此代码时的某个时刻发生,但它们实际上是否源自该执行行,或者它们只会出现在引发DownloadDataCompleted事件的e.Error属性中?

换句话说,a try/ catcharound会WebClient.DownloadDataAsync真正捕获任何东西,还是它们只是描述可能出现的错误e.Error

using (WebClient webClient = new WebClient()) {
    webClient.DownloadDataCompleted += (sender, e) => {
        if (e.Error != null) {
            // Exceptions definitely available here.
            Console.WriteLine(e.Error.Message);
        }
        else {
            Console.WriteLine("Success!");
        }
    };
    try {
        webClient.DownloadDataAsync(someUri);
    }
    catch {
        // Would this ever be hit?
        Console.WriteLine("Caught an exception from DownloadDataAsync.");
    }
}

我尝试了一个简单的 404 错误,但没有命中 catch 块(而e.Errors代码是),但我不知道下载调用本身是否会引发其他情况。

4

1 回答 1

1

是的,DownloadDataAsync会直接扔ArgumentNullException。它也会抛出NotSupportedExceptionUriFormatException。但是任何WebExceptions 都会通过回调(即事件)来。

于 2013-02-20T22:20:52.930 回答