4

非常に大きなテーブルで情報を検索する方法を開発しています。ORDER BYクエリで特別なもの (単純な のみ) を使用していないためSELECT id,description FROM complain WHERE description like 'YOUR TEXT HERE'"、結果のバッチを返すことで、より動的なユーザー エクスペリエンスを提供したいと考えていました。これは、Management Studio でクエリを実行するのと似ています。

いくつかの詳細、私の呼び出しスタックは大きくありませんが、すべてが同じメソッドにあるわけではありません。がありbuttonSearchClick、それぞれが異なるレイヤーにあります (それぞれインターフェイス、SearchBLL、SearchDAL) performCleanSearchsearchComplainBasedOnDetailInfo

のようなものを満たす非同期メソッドを作成することを考えましたList<Complain>が、それはきれいに見えません。非同期の 3 つのレイヤーを作成する必要があります。これを実装する方法について誰かがより良いアイデアを持っていますか? それとも、これが最善の方法ですか?

Edit1:接続文字列で Async Processing と共に SqlCommand.BeginExecuteReader を使用して、表示されるクエリから結果をフェッチすることができました...今度は、DAL メソッドを非同期にする方法を見つけなければなりません。レイヤーは非同期でも結果を取得できます...私はある種のバッファを実装することを考えていました...多分キュー...

Edit2:ページング ソリューションや twitter のようなもの (スクロールして新しい結果が検索される) を探しているわけではありません。

4

2 に答える 2

0

IEnumerable<Task<IEnumerable<T>>>メソッドから (T はアイテムのタイプに設定されます) を返すことができます。それぞれTask<IEnumerable<T>>が、将来受信する可能性のある情報のバッチを表します。メソッド自体は、フェッチするたびに各バッチを生成するイテレータ ブロックにするか、クエリの方法によっては、イテレータ ブロックを記述する必要なくシーケンス全体をバッチ処理できる場合があります。

次に、呼び出し元の観点から、次のように記述できます。

foreach(Task<IEnumerable<T> batch in GetBatches())
{
    updateUIWithBatch(await batch);
}
于 2013-03-13T14:28:52.270 に答える