タグ付けされた質問 「parallel-extensions」

4
Parallel.ForEachとTask.Factory.StartNew
以下のコードスニペットの違いは何ですか?どちらもスレッドプールスレッドを使用しませんか? たとえば、コレクション内の各アイテムの関数を呼び出したい場合、 Parallel.ForEach<Item>(items, item => DoSomething(item)); vs foreach(var item in items) { Task.Factory.StartNew(() => DoSomething(item)); }

7
いつCancellationTokenSourceを破棄するのですか?
クラスCancellationTokenSourceは使い捨てです。Reflectorをざっと見てみるKernelEventと、(ほとんどの場合)管理されていないリソースの使用がわかります。にCancellationTokenSourceはファイナライザがないため、破棄しない場合、GCはそれを行いません。 一方、MSDNの記事「マネージスレッドでのキャンセル」に記載されているサンプルを見ると、トークンを破棄するコードスニペットは1つだけです。 コードでそれを処分する適切な方法は何ですか? using待機しないと、並列タスクを開始するコードをラップできません。そして、あなたが待たない場合にのみキャンセルをすることは理にかなっています。 もちろんContinueWith、Dispose電話でタスクを追加することもできますが、その方法ですか? 同期されずに最後に何かを行うキャンセル可能なPLINQクエリについてはどうですか?言いましょう.ForAll(x => Console.Write(x))か? 再利用できますか?同じトークンを複数の呼び出しに使用してから、ホストコンポーネントと一緒に破棄できますか(UIコントロールなど)。 ResetクリーンアップIsCancelRequestedとTokenフィールド化のメソッドのようなものがないため、再利用できないと思います。したがって、タスク(またはPLINQクエリ)を開始するたびに、新しいタスクを作成する必要があります。本当ですか?はいの場合、私の質問はDispose、それらの多くのCancellationTokenSourceインスタンスに対処するための正しい推奨される戦略は何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.