我不确定我的代码,我想先保存到 Blob Azure 中,如果成功,则将该 URL 保存到我的数据库中,我有两种方法可以做到这一点。第一个使用名为 flag
的 bool 变量,如果 flag
值设置为 true 那么我可以将其保存到我的数据库中,但我'我不确定这段代码是否是最好的方法。是否有可能由于某种原因文件未上传到 Blob
,即使发生这种情况,flag
值也设置为 true
?:
第一种方法使用 bool 标志变量
:
using (Stream fileStream = file.InputStream)
{
blockBlob.UploadFromStream(fileStream);
flag = true;
}
if (flag == true)
{
Urls.Add(blockBlob.SnapshotQualifiedUri.ToString());
db.Save();
}
或者应该是使用 try catch
block 的更好方法?
try
{
using (Stream fileStream = file.InputStream)
{
blockBlob.UploadFromStream(fileStream);
}
}
catch(Exception)
{
//do something
}
Urls.Add(blockBlob.SnapshotQualifiedUri.ToString());
db.Save();
请在您的答案中解释每种方法之间的差异,我个人认为 try catch
应该是更好的方法,但我想在这里确认:)
最佳答案
通常在这种情况下,我会结合两者并创建一个方法来处理上传并根据上传是否成功或发生异常返回 true 或 false。
try catch 允许适当处理任何潜在的异常,并且该标志只是一个指示符,通知您该过程是否成功。
例如,对于您的上传代码,我将创建一个如下的扩展方法:
public static bool TryUploadFile(this CloudBlockBlob blockBlob, File file)
try
{
using (Stream fileStream = file.InputStream)
{
blockBlob.UploadFromStream(fileStream);
}
return true;
}
catch(Exception)
{
//do some logging or other error handling
}
return false;
}
然后像这样调用该方法:
bool succeeded = blockBlob.TryUploadFile(file);
if (succeeded)
{
Urls.Add(blockBlob.SnapshotQualifiedUri.ToString());
db.Save();
}
关于c# - 尝试 catch block 还是 bool 标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40413439/