我试图让我的代码能够在同一时间运行多个查询,但作为实施devart还没有等待/异步,我有一些问题搞清楚如何使其正常工作是否有可能换Devart Oracle驱动程序,使之异步
我的第一个想法是刚刚换我的仓库电话与
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/这听起来像一个坏主意,真的不一事无成
所以我一直在寻找异步功能Devart在司机 https://www.devart.com/dotconnect/oracle/articles/asynchronous.html
的问题是,我无法弄清楚如何使用这个BeginExecuteReader和EndExecuteReader用短小精悍,我结束了类似
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);
我已经第一次尝试是使用只写它小巧玲珑
保护异步任务GetElement(字符串SQL,对象参数= NULL)
{
using (var sqlConnection = new OracleConnection(Connectionstring))
{
await sqlConnection.OpenAsync();
var element = await sqlConnection.QuerySingleAsync<TModel>(sql, parameters);
return element;
}
}
但是,这并不异步
运行是否可以继续使用小巧精致,并使它真正异步?
我不使用Dapper,但是我发现这个[github页面](https://github.com/StackExchange/ Dapper/blob/master/Dapper/SqlMapper.Async.cs),它概述了.NET 4.5的异步调用。这有帮助吗? – tbone
**但是那不会运行异步**,你怎么知道你的代码没有运行异步,因为我看到两个'await'语句,无论如何,它们依次运行,即使你的调用线程被切回到调用者,由于'await' –