2015-01-17 4 views
-5

У меня возникла следующая проблема.Пусть EventHandler ждет функцию

У меня есть два ObservableCollections coll1, coll2. При добавлении к первому ObservableCollection я добавляю в coll1_CollectionChanged некоторые управляемые данные в coll2 - это запускает coll2_CollectionChanged.

В соответствии с действием (Добавить, Удалить, Сбросить), я позволю coll2_CollectionCHanged вызвать функцию. Проблема в том, что эта функция (позвольте мне назвать ее func1) запускает другую асинхронную функцию (запрос). После вызова запроса функция func1 должна выполнить другие действия - обновление некоторых данных.

Проблема заключается в том, что EventHandler должен ждать, пока func1 не будет готов (включая запрос), но это не так. В целом есть три действия Add to the coll2_CollectionCHanged, и после каждого добавления EventHandler следует дождаться готовности func1.

Запрос в func1 является асинхронной функцией. Я отметил func1 async и вызываю запрос с ожиданием. Чем я позволяю EventHandler вызывать func1 также async - я делаю асинхронный EventHandler и вызываю func1 с ожиданием. Но это не ждет.

+4

Вы можете показать, как на самом деле выглядит код? – i3arnon

+0

Я не могу показать это сейчас, потому что код работает. но похоже, что я это описал) –

+4

Хорошо, тогда то, что вы описали, должно работать. – i3arnon

ответ

0

Но это не ждет.

Уверенный. Событие обработчик приостановлен, ожидая завершения func1. Пока он приостановлен, он возвращается к своему вызывающему абоненту - центральной точке async.

Поведение, которое вы хотите, должно иметь код , поднимающий событие ObservableCollection.CollectionChanged, чтобы (асинхронно) дождаться завершения обработчика события. Это непросто; пытаясь перевернуть встроенный класс ObservableCollection для поддержки, это было бы очень сложно (возможно, невозможно).

Далеко проще, чтобы изменить вашу логику так, что, скажем, ваш код будет асинхронно ждать func1, чтобы он знал, что все побочные эффекты были применены.

Смежные вопросы