如何在具有返回类型Task的方法中尝试捕获?

时间:2019-01-26 21:01:17

标签: c# task-parallel-library

我有以下方法(为简单起见缩写):

public Task CreateAsync(TUser user)
{
    using (var connection = new SqlConnection(_connection))
    {
        return Task.FromResult(connection.Execute("CreateUser", param, commandType: CommandType.StoredProcedure));
    }
 }

我想加入一个try-catch block,这样我就可以记录任何潜在的Sql错误。

public Task CreateAsync(TUser user)
{
     var result = ???; // what is the return type here?
     try
     {
         result = FromResult(connection.Execute("CreateUser", param, commandType: CommandType.StoredProcedure));
      }
      catch(SqlException sqlEx)
      {
          // log error here
       }

      return result;
}

我想我不确定Task的返回类型是什么?

1 个答案:

答案 0 :(得分:5)

您应该使用异步方法而不是Task.FromResult。 我假设您正在使用Dapper或扩展SqlConnection的某种框架。 我不知道存储过程返回什么。如果返回值无关紧要,则代码应如下所示。

public async Task CreateAsync(TUser user)
{
     try
     {
         await connection.ExecuteAsync("CreateUser", param, commandType: CommandType.StoredProcedure);
     }
     catch(SqlException sqlEx)
     {
         // log error here
     }
}

如果那么重要(例如bool):

public async Task<bool> CreateAsync(TUser user)
{
     bool result;
     try
     {
        await connection.ExecuteAsync("CreateUser", param, commandType: CommandType.StoredProcedure);
        result = true;
     }
     catch(SqlException sqlEx)
     {
         // log error here
        result = false;
     }

     return result;
}