ReSharperは私がこれに似ていたforeachループをリファクタリングしました。私は、リストに保存されている異なるパラメータ、とデリゲートのBeginInvokeを介して、スレッドの束を起動し、コレクション内のIAsyncResultsを保存したい:LINQ経由で新しいスレッドを生成していますか?コールの不良コードを選択していますか?
var asyncResults = mylist.Select(x => myDelegate.BeginInvoke(x, null, null));
私の本能的な反応は、これは良い習慣ではないということです。 BeginInvokeは新しいスレッドが生成される副作用を引き起こし、Selectに渡された関数は副作用を引き起こすべきではありません。
私は呼び出しスレッドで何も変更していないので、多分それは大丈夫ですか?
「これは良い方法ですか? 「このコードは、私が記述している振る舞いを実装するのか?それはしません。このコードはクエリオブジェクトを作成するだけです。 「このリストから一連の非同期結果を生成するクエリです」という意味のオブジェクトを作成しました。 *そのクエリであると*クエリを*実行する*ことはありません。クエリを実行して結果をコレクションに格納する場合は、より多くのコードを記述する必要があります。 –
これは単独では何もしませんが、状況によっては適切かもしれません。しかし、BeginInvokeを呼び出すと、一般的にはスレッドが開始されることが望ましいと思うので、LINQクエリはこの場合foreachループとはまったく異なります。 – Jimmeh