I'm using .NET Core 2.0. I've got the following function that calls IDbCommand.ExecuteReader
public async Task<IEnumerable<Widget>> ReadAllAsync(
    System.Data.IDbConnection databaseConnection,
    System.Data.IDbTransaction databaseTransaction)
{
    var commandText = "SELECT WidgetId, Name FROM Widget";
    // _databaseCommandFactory.Create returns an IDbCommand
    var command = this._databaseCommandFactory.Create(databaseConnection, databaseTransaction, commandText);
    using (var dataReader = command.ExecuteReader())
    {
        // iterate through the data reader converting a collection of Widgets (`IEnumerable<Widget>`)
    }
}
I get a warning
This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.
I was thinking about converting the command.ExecuteReader() statement to await Task.Run(() => command.ExecuteReader()) as advised in the warning. But I'm not sure this is the correct approach, I believe Task.Run(...) is for doing CPU based work. This is primarily IO work.
So my questions are
Task.Run(...) the correct approach?ExecuteReaderAsync gets added to the IDbCommand interface? (is there a plan for this?)If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With