Необходимо вернуть SqlDataReader с асинхронным запросом к базе данных. - PullRequest
2 голосов
/ 14 апреля 2020

Следующий метод выполняет запрос в 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. Такие методы не могут возвращать ничего, кроме void или Task. Рассматривалось написание другого метода только для выполнения запроса, но aysnc методы не могут принимать ref параметров. Каков наилучший выход из этого?

1 Ответ

2 голосов
/ 14 апреля 2020

Task<T> может вернуть то, что вам нужно.

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;
    }
}
...