我正在尝试让我的代码能够同时运行多个查询,但由于devart没有实现await / async,我有一些问题想弄清楚如何使其正常工作
我的第一个想法是用
包装我的存储库调用public Task SleepAsync(int millisecondsTimeout)
{
return Task.Run(() => Sleep(millisecondsTimeout));
}
但是https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/来自https://www.devart.com/dotconnect/oracle/articles/asynchronous.html这听起来像个坏主意,并没有真正实现任何目标
所以我一直在关注Devart在驱动程序中的异步功能 https://bl.ocks.org/mbostock/4061961
问题是我无法弄清楚如何将这个BeginExecuteReader和EndExecuteReader与Dapper一起使用,我最终会得到像
这样的东西await Task.Factory.FromAsync(sqlConnection.BeginOpen, sqlConnection.EndOpen, null);
var oracleCommand = new OracleCommand(sql, sqlConnection);
OracleDataReader result = await Task.Factory.FromAsync(oracleCommand.BeginExecuteReader, oracleCommand.EndExecuteReader, null);
所以我最终得到了OracleDataReader,通常情况下我最终会使用IEnumerable:
IEnumerable<TModel> elements = await sqlConnection.QueryAsync<TModel>(sql, parameters);
我首先尝试的是使用Dapper
来编写它protected async Task GetElement(string sql,object parameters = null)
{
using (var sqlConnection = new OracleConnection(Connectionstring))
{
await sqlConnection.OpenAsync();
var element = await sqlConnection.QuerySingleAsync<TModel>(sql, parameters);
return element;
}
}
但是这不会运行async
是否可以继续使用Dapper并使其真正异步?