我試圖讓我的代碼能夠在同一時間運行多個查詢,但作爲實施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' –