是否可以将Devart Oracle驱动程序包装成异步

时间:2017-04-05 11:06:20

标签: asp.net oracle dapper devart

我正在尝试让我的代码能够同时运行多个查询,但由于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并使其真正异步?

0 个答案:

没有答案