TaskCreationOptions.AttachedToParent. ЧЯДНТ
От: Sharov Россия  
Дата: 04.10.16 14:27
Оценка: 45 (2)
Здравствуйте, господа.

Я в полном замешательсвте, ибо данный код:
static void Main(string[] args)
        {
            try
            {
                var f = Task.Factory.StartNew(t =>
                {
                     Task.Factory.StartNew(t1 =>
                        {
                            Console.WriteLine("start child");
                            throw new ArgumentException();
                        },
                        TaskCreationOptions.AttachedToParent);
                    
                }, TaskCreationOptions.None);

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

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

А мне кажется (и тут буквами написано),что данный код должен бросить AggregateException...

Где-то я не допонял
Кодом людям нужно помогать!
Re: Сильно...
От: Sharov Россия  
Дата: 04.10.16 16:45
Оценка:
Здравствуйте, Sharov, Вы писали:


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

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


Вопрос -- почему так? Как это может так разительно влиять на поведение?
Кодом людям нужно помогать!
Отредактировано 04.10.2016 16:46 Sharov . Предыдущая версия .
Re[2]: Сильно...
От: Sinix  
Дата: 04.10.16 17:42
Оценка: 116 (3)
Здравствуйте, Sharov, Вы писали:

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


Не та перегрузка выбралась,
Task StartNew(System.Action<object> action, object state)

Если стоит решарпер — поставьте heap allocation viewer и подсветку для boxing allocation оставьте. Остальные в принципе можно отключить (но это вопрос личных предпочтений, я только очевидные аллокации отключил).

В топик призывается @SergeyT с его ErrorProne.NET — ещё одна диагностика, которую точно стоит добавить.
Re[3]: Сильно...
От: Sharov Россия  
Дата: 04.10.16 18:17
Оценка:
Здравствуйте, Sinix, Вы писали:

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


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


S>Не та перегрузка выбралась,

S>
S>Task StartNew(System.Action<object> action, object state)
S>

S>Если стоит решарпер — поставьте heap allocation viewer и подсветку для boxing allocation оставьте. Остальные в принципе можно отключить (но это вопрос личных предпочтений, я только очевидные аллокации отключил).

Круть. Огромная благодарность Вам и Пельмешке Я так понимаю, что ребята из мс тут сильно выступили. Или я сильно выступил.
Кодом людям нужно помогать!
Re[4]: Сильно...
От: Sinix  
Дата: 04.10.16 18:41
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Круть. Огромная благодарность Пельмешке

А вот присоединюсь

S>Я так понимаю, что ребята из мс тут сильно выступили. Или я сильно выступил.

Первое — да, второе — снова да, но уже в хорошем смысле 9/10 расследования уже сделано было, я на готовое подтянулся.
Re[3]: Сильно...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.10.16 12:07
Оценка: 23 (1)
Здравствуйте, Sinix, Вы писали:

S>В топик призывается @SergeyT с его ErrorProne.NET — ещё одна диагностика, которую точно стоит добавить.


Ага. Аналогичные чудеса изредко приключаются с Html.ActionLink — та же хрень, перегрузка с object в параметрах.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.