Окна формы, отражения и ожидания - PullRequest
0 голосов
/ 15 июня 2019

У меня есть приложение Winforms (.Net Core 3.0), которому необходимо использовать двоичную сборку, созданную для .Net Core 2.1

. Двоичная сборка загружается с помощью отражения.

Некоторые объектыэкземпляр (также через отражение) из этой загруженной сборки и некоторые объекты зависимостей, локальные для приложения WinForms, передаются в эти конструкторы при создании экземпляра.

Когда эти объекты зависимости используются в приложении Winforms, все работает как положено.Существуют асинхронные методы, которые можно успешно ожидать.

Тем не менее, когда у «отражательно созданных» объектов вызывается метод, который использует переданные в объектах зависимости вещи работают, как и ожидалось, до момента, когда ожидается ожидание.Позвонил.

Результат await успешен (например, вызов Cosmos Db, где я вижу изменение данных), но поток никогда не возвращается из вызова await. Затем основной поток форм поднимает и перемещаетна.Если выполняется несколько вызовов, основной поток (и форма) зависает.

Эти объекты зависимостей не взаимодействуют с какими-либо элементами управления Windows Forms.

Если у кого-то есть идеи относительно того, почемупоток возвращается к вызывающему методу и не ждет, я буду вечно благодарен.

1 Ответ

0 голосов
/ 17 июня 2019

Это была строка кода, которая вызывала проблему (к сожалению, я заблудился в сложностях проекта в целом)

kvp.Value.ForEach(async handler => await ((dynamic)handler).Handle(@event, cancellationToken));

Теперь я добавил задачи, которые следует ожидатьList<Task> и дождитесь WhenAll.

Выполнение, как я это делал выше, означало, что метод включения не был помечен как асинхронный, как вместо выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...