Сообщение Re[3]: Почему будет deadlock? от 20.01.2020 15:22
Изменено 20.01.2020 15:34 alexander_r
Re[3]: Почему будет deadlock?
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, alexander_r, Вы писали:
_>>просто await task;
_>>ну или .ContinueWith(t => task.Wait())
S>Это понятно, но почему в исходном случае deadlock? Почему все на одном стеке? Как это можно понять не запуская код, т.к. данная ситуация стабильно вопроизводится, следовательно есть
S>какая-то неявная особенность.
так вы же вызываете await tcs.Task; он и переключает все в один поток
т.е или tcs.Task.Wait(), task.Wait() или await tcs.Task, await task
S>Здравствуйте, alexander_r, Вы писали:
_>>просто await task;
_>>ну или .ContinueWith(t => task.Wait())
S>Это понятно, но почему в исходном случае deadlock? Почему все на одном стеке? Как это можно понять не запуская код, т.к. данная ситуация стабильно вопроизводится, следовательно есть
S>какая-то неявная особенность.
так вы же вызываете await tcs.Task; он и переключает все в один поток
т.е или tcs.Task.Wait(), task.Wait() или await tcs.Task, await task
Re[3]: Почему будет deadlock?
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, alexander_r, Вы писали:
_>>просто await task;
_>>ну или .ContinueWith(t => task.Wait())
S>Это понятно, но почему в исходном случае deadlock? Почему все на одном стеке? Как это можно понять не запуская код, т.к. данная ситуация стабильно вопроизводится, следовательно есть
S>какая-то неявная особенность.
так вы же вызываете await tcs.Task; он и переключает все в один поток
т.е или tcs.Task.Wait(), task.Wait() или await tcs.Task, await task
попробуйте добавить в ваш код
S>Здравствуйте, alexander_r, Вы писали:
_>>просто await task;
_>>ну или .ContinueWith(t => task.Wait())
S>Это понятно, но почему в исходном случае deadlock? Почему все на одном стеке? Как это можно понять не запуская код, т.к. данная ситуация стабильно вопроизводится, следовательно есть
S>какая-то неявная особенность.
так вы же вызываете await tcs.Task; он и переключает все в один поток
т.е или tcs.Task.Wait(), task.Wait() или await tcs.Task, await task
попробуйте добавить в ваш код
Form f = new Form();
Test();
Application.Run(f);