需要 return 带有异步数据库请求的 SqlDataReader

Need to return SqlDataReader with asynchronous database request

以下方法在 SQL 服务器数据库中执行查询:

private bool authenticated(SqlConnection conn)
{
    string query = "some sql query";
    SqlCommand cmd = new SqlCommand(query, conn);

    // the intent is to change this to: SqlDataReader reader = await cmd.ExecuteReaderAsync();
    SqlDataReader reader = cmd.ExecuteReader();

    if (!reader.HasRows)
    {
       return false;
    }

    while (reader.Read())
    {
        // do some stuff
       /*
        if (some condition)
            return true;
       */
    }
}

执行查询的方法调用需要更改为异步版本。但是,该方法需要更改为 async。这些方法不能 return 除了 voidTask 以外的任何东西。已经考虑为查询执行编写另一个方法,但是 aysnc 方法不能采用 ref 参数。解决这个问题的最佳方法是什么?

Task<T>可以return你所需要的

private async Task<bool> authenticated(SqlConnection conn)
{
    string query = "some sql query";
    SqlCommand cmd = new SqlCommand(query, conn);

    // the intent is to change this to: SqlDataReader reader = await cmd.ExecuteReaderAsync();
    SqlDataReader reader = await cmd.ExecuteReaderAsync();

    if (!reader.HasRows)
    {
       return false;
    }

    while (reader.Read())
    {
        // do some stuff
        if (some condition)
            return true;
    }
}