2010-01-11 2 views
2

на данный момент я пытаюсь некоторые новые особенности библиотеки Task Parallel Library, поставляется с 4.0 Beta .Net Framework 2.Обработка исключений (Task Parallel Library) .Net Framework 4.0 Beta 2

Мой вопрос относится конкретно к обработки исключений в пределах TPL, как описано здесь, : http://msdn.microsoft.com/en-us/library/dd997415%28VS.100%29.aspx

Первый пример (изменил его немного):

static void Main(string[] args) 
    { 
     var task1 = Task.Factory.StartNew(() => 
     { 
      throw new Exception("I'm bad, but not too bad!"); // Unhandled Exception here... 
     }); 

     try 
     { 
      task1.Wait(); // Exception is not handled here.... 
     } 
     catch (AggregateException ae) 
     { 
      foreach (var e in ae.InnerExceptions) 
      { 
       Console.WriteLine(e.Message); 
      } 

     } 

     Console.ReadLine(); 
    } 

Accord в документацию исключение должно быть распространено обратно к соединению, которое вызывает: task1.Wait().

Но я всегда получаю необработанное исключение в пределах:

var task1 = Task.Factory.StartNew(() => 
{ 
    throw new MyCustomException("I'm bad, but not too bad!"); 
}); 

Может кто-нибудь объяснить мне, почему, или кто-то знает, если что-то изменилось с момента выхода Beta 2?

ответ

1

Ваше исключение, вероятно, будет выброшено до того, как вы достигнете инструкции try и соответствующего ожидания.

Попробуйте это:

static void Main(string[] args) 
{ 

    try 
    { 
     // Move this inside teh try block, so catch can catch any exceptions thrown before you get to task1.Wait(); 
     var task1 = Task.Factory.StartNew(() => 
     { 
      throw new Exception("I'm bad, but not too bad!"); // Unhandled Exception here... 
     }); 

     task1.Wait(); // Exception is not handled here.... 
    } 
    catch (AggregateException ae) 
    { 
     foreach (var e in ae.InnerExceptions) 
     { 
      Console.WriteLine(e.Message); 
     } 

    } 

    Console.ReadLine(); 
} 
+0

К сожалению, это ничего не меняет в поведении, все еще существует необработанное исключение, как описано выше. –

9

Ответ в статье вы связаны:

Когда "Just My Code" включена, Visual Студия в некоторых случаях сломается на линии который выдает исключение, и отображает сообщение об ошибке, которое сообщает «Исключение не обрабатывается кодом пользователя». Эта ошибка является доброкачественной. Вы можете нажать F5 , чтобы продолжить, и посмотрите на поведение обработки исключений , которое представлено в этих примерах: . К запретить Visual Studio отказаться от первой ошибки, просто снимите галочку с «Только мой код» в разделе Инструменты, Опции, Отладка, Общие.

+0

Только что спасал мой прикладом! Кто бы ни пришел, обратите внимание, что это «снять отметку», а не «проверить»! * висит голова в стыде за невозможность чтения * – Crisfole

+0

Странная «функция» ... Является ли это ошибкой в ​​Visual Studio? –

Смежные вопросы