c# - 尝试 catch block 还是 bool 标志?

标签 c# asp.net-mvc entity-framework

我不确定我的代码,我想先保存到 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/

相关文章:

mysql - 带索引的 order by limit 的缓慢 MySql 查询

c# - 确保方法在另一个方法调用之前完成

c# - 如何在 ASP.NET MVC 中获取当前用户

asp.net - 未为 ASP.Net MVC 3 DropDownListFor 设置所选值

asp.net-mvc - MVC : "The incoming request does not match any route." - with a default request

c# - 如何填充 GridView 异步

c# - 从 .NET Framework 4.52 迁移到 .NET Core 后的通用存储库问题

c# - 如何使用唯一的 ID 来识别每台远程计算机

c# - 优化 DateTime.Now 的替代方案

c# - 获取文件名的快速方法是什么?