web-dev-qa-db-ja.com

BackgroundWorkerのタスク並列ライブラリの置き換え?

タスク並列ライブラリには、BackgroundWorkerクラスの置換または改善と見なされるものがありますか?

ウィザード形式のUIを備えたWinFormsアプリケーションがあり、長時間実行されるタスクがいくつかあります。標準の進行状況バーと操作をキャンセルする機能を備えたレスポンシブUIが必要です。 BackgroundWorkerを使用してこれを実行したことがありますが、代わりに使用できるTPLパターンがあるかどうか疑問に思っていますか?

82
Keith G

TaskクラスはBackgroundWorker;を改良したものです。ネスト(親/子タスク)を自然にサポートし、新しいキャンセルAPI、タスクの継続などを使用します。

私のブログに例があります 、古いBackgroundWorkerのやり方と新しいTaskのやり方を示しています。構文がやや扱いにくいので、進行状況を報告する必要があるタスク用の小さなヘルパークラスがあります。この例では、結果の値、エラー条件、キャンセル、進行状況のレポートを扱います。

90
Stephen Cleary

バックグラウンドワーカーは、これを達成するための有効な方法です。複数の大規模な操作を同時に実行している場合は、並列拡張を検討する価値があります。

23
Hatch