新しいC#5でL2Sを使用するベストプラクティスはthisのアプローチと比較してキーワードがasync/await
ですか?ウェブ上で何も見つかりませんでした。新しいasync/awaitと非同期にLinqを使用する
6
A
答えて
6
EF 5にはasync/awaitサポートはありませんが、オープンソース版ではここで可能性を検討しています。編集:EFでの非同期サポートはhttp://msdn.microsoft.com/en-us/data/jj819165.aspxに記載されています。 (RXで見つけたように)水和された結果をストリームしませんが、データベース呼び出しを非同期にします。
LINQ to SQLに関しては、Task.Factory.Start操作でリクエストをラップする以外に、非同期(非同期/待機用に必要)タスクがLinq用に実装されることを望んでいませんSQLへ。
絶対に必要な場合は、IQToolkitを使用して、独自の非同期サポートを追加して拡張することができます。また、MonoはLINQ to SQLを実装しており、非同期サポートで拡張することができます。
3
Scott Hanselmanはinteresting postを持っており、既存のLinq to SQLクエリの上に非同期APIを生成する方法を示しています。私はこのアイデアを持ちすぎずにいますが、同じテクニックをIQueryableやIEnumerable型のオブジェクトに拡張できる汎用的な拡張メソッドを作ることができると推測しています。
ここには彼の投稿から直接参照として使用するコードがあります。
SqlCommand _beginFindCmd = null;
public IAsyncResult BeginFind(int id, AsyncCallback callback, Object asyncState)
{
var query = from w in _db.Widgets
where w.Id == id
select w;
_beginFindCmd = _db.GetCommand(query) as SqlCommand;
_db.Connection.Open();
return _beginFindCmd.BeginExecuteReader(callback, asyncState, System.Data.CommandBehavior.CloseConnection);
}
public Widget EndFind(IAsyncResult result)
{
var rdr = _beginFindCmd.EndExecuteReader(result);
var widget = (from w in _db.Translate<Widget>(rdr)
select w).SingleOrDefault();
rdr.Close();
return widget;
}
少しの作業で、このTPLを作成し、同様に単一の非同期メソッドとしてより洗練されたものにすることができます。ちょうどこれをする機会があれば、私が思いつくものを投稿します。
関連する問題
- 1. LINQのと非同期ラムダ
- 2. AJAXを使用しない非同期更新DIVレイヤー
- 3. JMSで同期メッセージと非同期メッセージを使用するタイミング
- 4. 非同期機能を使用していないときに非同期エラーが発生しますか?
- 5. 非同期ツイスト通話を使用する同期クライアントのリファクタリング
- 6. カーソルアダプタを使用した非同期リストビュー
- 7. NSURLConnectionを使用した非同期ダウンロードキュー
- 8. web2pyを使用した非同期バックグラウンドプロセス
- 9. XCTestを使用した非同期メソッドテスト
- 10. async.jsを使用した非同期ツリートラバーサル
- 11. Mojoliciousを使用した非同期チャットサーバ
- 12. CanBeNullとReSharper - 非同期タスクで使用していますか?
- 13. 新しいキーワード 'await'を使用した非同期呼び出し
- 14. 貧しいマンの非同期/を使用して非同期タイムアウトを実装する構造を待つ
- 15. lambdaを非同期コールバックとして使用する
- 16. LinqのSql非同期更新へのChangeConflictException
- 17. 非同期ソケットと同期
- 18. Node.js - 非同期のlib-async.foreachをオブジェクトと共に使用する
- 19. Meteor.methodsを同期非同期にする
- 20. 同期と非同期AJAXを同時に実行する
- 21. 非同期タスクでMVC3を使用してUIを更新する
- 22. DatabindグリッドLINQ非同期ASP.NET C#
- 23. 非同期ループをLINQクエリに変換する
- 24. 非同期に使用されるHttpListenerが同期的に動作する
- 25. 春非同期 - 非同期豆に
- 26. C#EndInvokeを使用しない非同期呼び出し?
- 27. コアデータのManagedObjectContext.ExecuteFetchRequestを非同期で非同期にする方法
- 28. 非同期代表団とParallel.ForEach対OrderByCompletion(ジョンスキート)を使用する
- 29. PowershellのBeginInvoke()とEndInvoke()を非同期で使用する
- 30. Nodejsでredisとbluebirdで非同期待機を使用する
ラッパーなどを作成することは可能でしょうか? Btw、最新のEFはasync/awaitをサポートしていますか? – UserControl