C# 上传/下载文件到谷歌云存储时可能出现的例外情况

C# 上传/下载文件到谷歌云存储时可能出现的例外情况,c#,exception,google-cloud-storage,C#,Exception,Google Cloud Storage,我正在使用.NETGoogle.Cloud.Storage.V1library向谷歌云存储上传和下载文件。我对异常处理感兴趣。我知道捕获一般的异常是一种不好的做法,因此我试图找出可能遇到的异常类型。到目前为止,我发现了这三个: 1) HttpRequestException当连接出现问题时 2) OperationCanceledException在启动上载/下载过程中连接丢失时,可能会引发此问题 3) GoogleApiException当文件在云中不存在时,bucket已经存在,等等 还有什

我正在使用.NET
Google.Cloud.Storage.V1
library向谷歌云存储上传和下载文件。我对异常处理感兴趣。我知道捕获一般的
异常是一种不好的做法,因此我试图找出可能遇到的异常类型。到目前为止,我发现了这三个:

1)
HttpRequestException
当连接出现问题时

2)
OperationCanceledException
在启动上载/下载过程中连接丢失时,可能会引发此问题

3)
GoogleApiException
当文件在云中不存在时,bucket已经存在,等等

还有什么我应该注意的吗?

好吧,这是一种“坏习惯”,因为您通常只想在可以处理异常时捕获异常。如果您不知道抛出了什么类型的异常,您可以做些什么来处理它们

典型的做法是捕获调用堆栈中尽可能高的未捕获异常,这样您可以做一些比关闭进程更优雅的事情。对于web应用程序,这可能意味着重定向到错误页面,对于表单,可能会显示消息框等

因此,如果捕获异常只是为了执行常规日志记录或一些基本操作,那么捕获
异常
没有什么错


为了回答实际问题,.NET没有元数据来指示可以像Java或其他平台那样引发哪些异常。如果有的话,你必须依靠文件。另外,这将是一个实现细节,可以在不破坏兼容性的情况下进行更改

我猜你错过了
System.Net.WebException
的响应,比如禁止访问等
System.IO.IOException
在本地写入文件时,您可能会遇到磁盘存储和访问issues@zafar非常感谢。我将把这些添加到我的代码中!谢谢你的回答!因此,处理所有已知的特定情况、通知用户、添加特定于每个
异常
类型的重试逻辑等,最后仍然捕获常规
异常
以记录它,将被视为良好做法?另外,我猜在记录它并通知用户之后,我仍然需要关闭程序,因为它处于未知状态?这不是一个好的做法,但您可以捕获像这样的常规日志记录的异常。您还可以抛出InvalidOperationException以指示对象具有无效状态。