我正在使用.NET Core 2.0。我有以下调用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>`)
}
}
我收到了一个警告
这个异步方法缺少 'await' 操作符,将以同步方式运行。考虑使用 'await' 操作符等待非阻塞 API 调用,或者使用 'await Task.Run(...)' 在后台线程上执行 CPU 绑定工作。
我正考虑按照警告中的建议将 command.ExecuteReader()
语句转换为 await Task.Run(() => command.ExecuteReader())
。但我不确定这是否是正确的方法,我认为 Task.Run(...)
是用于执行基于CPU的工作,而这主要是IO操作。
所以我的问题是
Task.Run(...)
是正确的方法吗?- 如果不是,有其他解决方案吗?
- 还是我现在应该忽略警告,并等待
ExecuteReaderAsync
添加到IDbCommand
接口中?(计划中是否有这样的计划?)