Задача и молчание исключений

Почему исключения, брошенные внутри задачи, являются тихим исключением, и вы никогда не знаете, было ли брошено определенное исключение

try
{

 Task task = new Task(
  () => {
          throw null;
        }
        );
  task.Start();
 }
 catch
 {
  Console.WriteLine("Exception");
 }  

программа успешно выполняется в полной тишине! где поведение потоков отличается

try
{

 Thread thread = new Thread(
  () => {
          throw null;
        }
        );
  thread .Start();
 }
 catch
 {
  Console.WriteLine("Exception");
 }

в этом случае будет выброшено исключение нулевого указателя. В чем разница?

18
задан Sleiman Jneidi 2 March 2015 в 15:22
поделиться

1 ответ

Нет, задачи не являются потоками. Задачи представляют собой абстракцию высокого уровня - они представляют собой единицу работы, которая по своей природе параллельна. Потоки запускают единицы работы.

В первом примере вы создаете единицу работы, а затем указываете ей, что она должна выполняться сама (как это происходит, - деталь реализации Task). Принимая во внимание, что в вашем втором примере вы явно запланируете единицу работы (это будет отличаться от реализации Задачи).

5
ответ дан 30 November 2019 в 08:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: