我遇到了以下问题。
我有两个ObservableCollections coll1
,coll2
。在添加到第一个ObservableCollection coll1
时,我将coll1_CollectionChanged
一些操纵数据添加到coll2
中 - 这会激活coll2_CollectionChanged
。
根据动作(添加,删除,重置),我让coll2_CollectionCHanged
调用一个函数。问题是,这个函数(让我称之为func1
)启动另一个异步函数(查询)。在查询调用之后,函数func1
应该执行另一个操作 - 更新一些数据。
问题是,coll2_CollectionChanged
EventHandler应该等到func1
准备就绪(包括查询),但它不会。总而言之,coll2_CollectionCHanged
有三个添加操作,每次添加后,EventHandler应该等待func1
准备就绪。
func1
中的查询是异步函数。我将func1
标记为异步并使用await调用查询。我让EventHandler也将func1
称为异步 - 我使EventHandler异步并使用await调用func1
。但它不会等待。
答案 0 :(得分:0)
但它不会等待。
确实如此。事件处理程序暂停,等待func1
完成。当它暂停时,它会返回其调用者 - async
的中心点。
您想要的行为是将代码提升 ObservableCollection.CollectionChanged
事件(异步)等待事件处理程序完成。这并不容易;试图扭曲内置的ObservableCollection
类来支持这一点非常困难(也许是不可能的)。
更简单的解决方案是更改您的逻辑,以便您的其他代码将异步等待func1
,以便它知道已应用所有副作用。