Информация об изменениях

Сообщение Re: Сильно... от 04.10.2016 16:45

Изменено 04.10.2016 16:46 Sharov

Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, господа.


S>Я в полном замешательсвте, ибо данный код:

S>
S>static void Main(string[] args)
S>        {
S>            try
S>            {
S>                var f = Task.Factory.StartNew(t =>
S>                {
S>                     Task.Factory.StartNew(t1 =>
S>                        {
S>                            Console.WriteLine("start child");
S>                            throw new ArgumentException();
S>                        },
S>                        TaskCreationOptions.AttachedToParent);
                    
S>                }, TaskCreationOptions.None);

S>                f.Wait(1000);
S>                Console.WriteLine(f.IsFaulted);
S>            }
S>            catch(AggregateException exp)
S>            {
S>                Console.WriteLine(exp);
S>            }
S>            Console.WriteLine("done");
S>            Console.ReadLine();
S>        }
S>

S>выводит на консоль
S>False
S>done
S>start child

Путем гуглежа нашел пример идентичный моему, но работаюший ожидаемо. Путем буквального сопоставления обнаружил разниуц -- дочерний поток надо стартовать с пустым аргументом, т.е.
не
  Task.Factory.StartNew(t1 => ...

а
  Task.Factory.StartNew(() => ...


Вопрос -- почему так? Как это может так разительно влиять на поведение?
Re: Сильно...
Здравствуйте, Sharov, Вы писали:


Путем гуглежа нашел пример идентичный моему, но работающий ожидаемо. Путем буквального сопоставления обнаружил разницу -- дочерний поток надо стартовать с пустым аргументом, т.е.
не
  Task.Factory.StartNew(t1 => ...

а
  Task.Factory.StartNew(() => ...


Вопрос -- почему так? Как это может так разительно влиять на поведение?