让EventHandler等待一个函数

时间:2015-01-17 13:22:15

标签: c# silverlight asynchronous async-await eventhandler

我遇到了以下问题。

我有两个ObservableCollections coll1coll2。在添加到第一个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。但它不会等待。

1 个答案:

答案 0 :(得分:0)

  

但它不会等待。

确实如此。事件处理程序暂停,等待func1完成。当它暂停时,它会返回其调用者 - async的中心点。

您想要的行为是将代码提升 ObservableCollection.CollectionChanged事件(异步)等待事件处理程序完成。这并不容易;试图扭曲内置的ObservableCollection类来支持这一点非常困难(也许是不可能的)。

更简单的解决方案是更改您的逻辑,以便您的其他代码将异步等待func1,以便它知道已应用所有副作用。