2013-02-20 11 views
3

MSDN documentation for WebClient.DownloadDataAsync列出了可能来自调用该方法的两个潜在异常。WebClient.DownloadDataAsync本身是否真的会引发异常?

例外:

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

虽然我不怀疑,在某些时候,当这个代码被称为可能会出现这些异常,可他们居然从该行执行的发起或将他们只是在提出DownloadDataCompleted事件的e.Error属性面?

换句话说,将围绕WebClient.DownloadDataAsync一个try/catch实际捕捉到任何或者他们只是描述了可以在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代码是),但我不知道其他一些情况将会从下载扔调用本身。

+3

当您尝试将'null'或无效URI传递给DownloadDataAsync时发生了什么? – dtb 2013-02-20 22:06:44

+0

您可以反编译'DownloadDataAsync'(例如使用Reflector)并查明它是否抛出任何东西...... – Yahia 2013-02-20 22:07:32

+0

@dtb一个'null' URI确实击中了'catch'块。谢谢。现在我想我需要嘲笑ILSpy,看看我能否找到它可能抛出的“WebException”。 – patridge 2013-02-20 22:12:40

回答

1

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

+1

这些信息的参考是什么? – usr 2013-02-20 22:37:59

+0

http://referencesource.microsoft.com/netframework.aspx上的参考源代码 – 2013-02-20 23:04:34