Почему исключения, брошенные внутри задачи, являются тихим исключением, и вы никогда не знаете, было ли брошено определенное исключение
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");
}
в этом случае будет выброшено исключение нулевого указателя. В чем разница?
Нет, задачи не являются потоками. Задачи представляют собой абстракцию высокого уровня - они представляют собой единицу работы, которая по своей природе параллельна. Потоки запускают единицы работы.
В первом примере вы создаете единицу работы, а затем указываете ей, что она должна выполняться сама (как это происходит, - деталь реализации Task). Принимая во внимание, что в вашем втором примере вы явно запланируете единицу работы (это будет отличаться от реализации Задачи).