4

違いは何ですか

var task3 = Task.Run(() => PerformLongTask()).ContinueWith(t => Log.Error(t.Exception), TaskContinuationOptions.OnlyOnFaulted);

var task3 = Task.Run(() => PerformLongTask());

private void PerformLongTask()
{
  try
  {
  //......
  }
  catch (Exception ex)
  {
     Log.Error(ex);
  }
}

両方の例を実行してみました。表面的には、それらは同じように動作するように見えます。

あるアプローチは他のアプローチよりも優れていますか?

4

1 に答える 1

2

この場合、それらは同じです。ただし、「PerformLongTask」の内部を所有していない場合は、その内容を try-catch でラップすることもできません。また、タスクのステータスは、例外がスローされた場合でも、この方法で RanToCompletion に設定されます。タスクに継続がある場合は、有効な結果を持たない可能性のある先行タスクに対処する必要があります。

簡単に言うと、前者の場合、例外処理ロジックが別のタスクに含まれ、残りから切り離されているということです。

于 2013-07-25T14:25:57.607 に答える