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

Сообщение Re[3]: wpf, выполнение действий в разных потоках от 14.07.2016 13:26

Изменено 14.07.2016 13:54 Serginio1

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

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


S>>http://ru.stackoverflow.com/questions/514529/%d0%97%d0%b0%d0%b2%d0%b8%d1%81%d0%b0%d0%b5%d1%82-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80-await-%d0%b2-%d0%be%d0%ba%d0%be%d0%bd%d0%bd%d0%be%d0%bc-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b8-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b0-%d0%b2%d0%b8%d1%81%d0%b8%d1%82-%d0%bf%d1%80%d0%b8-%d0%b2%d1%8b%d0%b7%d0%be%d0%b2%d0%b5-task/514533#514533


A>интересно, но как это поможет решить проблему, не понял (


A>Bar().Wait();

A>await Task.Delay(1000); // здесь как бы вывод на экран
A>такого в нашем коде и нет — нет Wait, о котором статья.

A>Просто использование await не работает, т.к в этом await идет отрисовка через synhronizationContext UI. И когда там подвисает, то подвисает и все приложение.

A>При этом имеющаяся видеопанель как-то ухитряется не виснуть, хотя код модуля с await тот же самый.

await Task.Delay(1000).ConfigureAwait(false); // Не блокирует и заканчивает поток в том потоке в котором и вызван.


Создавай задачи, главное, что бы они использовали внутри задачи только с ConfigureAwait(false);
Иначе получишь взаимную блокировку.
Здравствуйте, alex1010, Вы писали:

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


S>>http://ru.stackoverflow.com/questions/514529/%d0%97%d0%b0%d0%b2%d0%b8%d1%81%d0%b0%d0%b5%d1%82-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80-await-%d0%b2-%d0%be%d0%ba%d0%be%d0%bd%d0%bd%d0%be%d0%bc-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b8-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b0-%d0%b2%d0%b8%d1%81%d0%b8%d1%82-%d0%bf%d1%80%d0%b8-%d0%b2%d1%8b%d0%b7%d0%be%d0%b2%d0%b5-task/514533#514533


A>интересно, но как это поможет решить проблему, не понял (


A>Bar().Wait();

A>await Task.Delay(1000); // здесь как бы вывод на экран
A>такого в нашем коде и нет — нет Wait, о котором статья.

A>Просто использование await не работает, т.к в этом await идет отрисовка через synhronizationContext UI. И когда там подвисает, то подвисает и все приложение.

A>При этом имеющаяся видеопанель как-то ухитряется не виснуть, хотя код модуля с await тот же самый.

await Task.Delay(1000).ConfigureAwait(false); // Не блокирует и заканчивает поток в том потоке в котором и вызван.


Создавай задачи, главное, что бы они использовали внутри асинхронные методы только с ConfigureAwait(false);
Иначе получишь взаимную блокировку.