WebClient.DownloadDataAsync是否真的会抛出异常?

时间:2013-02-20 22:03:30

标签: c# webclient

MSDN documentation for WebClient.DownloadDataAsync列出了调用该方法可能产生的两个潜在异常。

例外:

  • ArgumentNullException - address参数为null。
  • WebException - 通过组合BaseAddress和地址形成的URI无效。 - 或 - 下载资源时发生错误。

虽然我不怀疑在调用此代码的某些时候可能会出现这些异常,但它们是否真的来自该执行行,或者它们是否只会出现在DownloadDataCompleted事件的e.Error中属性?

换句话说,try周围catch / 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代码是),但我不知道是否会有其他情况从下载调用中抛出。

1 个答案:

答案 0 :(得分:1)

是的,DownloadDataAsync会直接抛出ArgumentNullException。它还会抛出NotSupportedExceptionUriFormatException。但任何WebException都将通过回调(即事件)。