Если попытаться запустить await функцию из из основного потока WinForms - то ничего не получиться - все скомпилируется, вызовется до await, после чего управление как и положено вернется в основной поток, но так как это не совсем простой поток - а основной поток GUI у которого имеется SynchronizationContext - то await поток обратного вызова который рассматривался в предыдущем посте никогда не получит управления и приложение "зависнет":
поэтому самый правильный и очевидный путь обхода этого ограничения - запустить новый поток, в котором естественно не будет этого "ужасного" SynchronizationContext
Task t = Task.Run(() => AsyncAwaitTests.SampleAsync());
дальнейшее поведение будет как уже описывалось в предыдущем посте . Если же нам надо получать какие-то данные в результате работы асинхронной функции то надо использовать следующее:
поэтому самый правильный и очевидный путь обхода этого ограничения - запустить новый поток, в котором естественно не будет этого "ужасного" SynchronizationContext
Task t = Task.Run(() => AsyncAwaitTests.SampleAsync());
дальнейшее поведение будет как уже описывалось в предыдущем посте . Если же нам надо получать какие-то данные в результате работы асинхронной функции то надо использовать следующее:
Комментариев нет :
Отправить комментарий