私はWebAPIプロジェクトで使用されるすべてのSQLベースクラスにasyncの実装を追加しています。私はまだTAPのパラダイムを新しくしているので、私はまだ学んでいます。C#DataTableを非同期で実装する
他の投稿のおかげで、Task.Run()経由でスレッドを生成すると、ASP.NETコンテキストでパフォーマンス上の利点はありません。だから私は私の実装にもっと注意しています。
私はQueryExecutorメソッドを以下の非同期実装に変更しました。しかし、どのような方法をロードする最良の方法を把握することはできませんDataTableです。私は理想的にはreader.ReadAsync()
を使用してDataTableにデータを追加したいと思っていますが、.NET 4.5フレームワークで利用できるものはないようです。
私はDataTable.LoadAsync(DbDataReader reader)
のような独自の拡張メソッドを書く価値があると思いますか?私は管理された.Netコードほど愚かではないので、それが助けられたらいいなと思う。
あなたの意見を聞かせてください。
private async Task<DataTable> ExecuteQueryInternalAsync(string commandText, CommandType commandType, SqlConnection sqlConnection, SqlTransaction transaction, params SqlParameter[] parameters)
{
using (SqlCommand cmd = new SqlCommand(commandText, sqlConnection) { CommandType = commandType, CommandTimeout = this.config.MainConnectionTimeoutInSeconds })
{
if (transaction != null)
cmd.Transaction = transaction;
if (parameters != null)
{
foreach (var parameter in parameters)
{
if (parameter != null)
{
if (parameter.Value == null)
parameter.Value = DBNull.Value;
cmd.Parameters.Add(parameter);
}
}
}
if (sqlConnection.State == ConnectionState.Closed)
await sqlConnection.OpenAsync();
using (var reader = await cmd.ExecuteReaderAsync())
{
//Want to use: reader.ReadAsync()
var tb = new DataTable();
tb.Load(reader);
return tb;
}
}
}
おかげで、 ポール
:サンプルコードは管理されています.Netコード –
一般に、非同期コードはEntit y 'DataTable'ではなくフレームワーククエリ。 –
私はEF 6を使用します。しかし、SPを実行して結果をDataTableとして取得する必要がある場合があります。 – Sal