0

データの読み込みが進行中および完了したときに、nofity リスナーへのイベントを持つインターフェイス IDataQuery があります。ロードは BackgroundWorker を介して行われ、IDataQuery のサブクラスで適切に起動されます。

public interface IDataQuery : IDisposable
{
  event EventHandler<DataLoadCompletedEventArgs> LoadCompleted;
  event EventHandler<DataLoadProgressEventArgs> LoadProgressChanged;
}

DataLoadCompletedEventArgs と DataLoadProgressEventArgs は EventArgs から派生し、データ/進行状況情報が関連付けられています。

現在、バックグラウンド スレッドで発生する可能性のあるエラーをキャプチャしておらず、LoadCompleted EventHandler が起動されており、RunWorkerCompletedEventArgs をチェックしてエラーがあることを確認していません。エラーが発生したことを消費者に適切に通知したい。

これらのバックグラウンド タスクでエラーを処理するための最適な設計は何ですか? するべきか:

  1. 独自のエラー/例外プロパティを LoadCompleted に追加し、コンシューマにチェックを要求しました
  2. 失敗の場合に特化した新しい EventHandler / EventArgs を用意する
  3. DataLoadCompletedEventArgs を AsyncCompletedEventArgs (Error プロパティを持つ) から派生させ、「Completed with error」ケースと「Completed with success」ケースをバンドルしたままにしますか?
  4. 他の何か?
4

1 に答える 1

0

オプション 3 は、Microsoft が推奨するこのパターンのベスト プラクティスに最も適しているようです。

この MSDN ページの「エラーと例外」セクションを参照してください。

イベント ベースの非同期パターンを実装するためのベスト プラクティス

于 2012-07-11T19:03:46.620 に答える