【发布时间】:2013-12-07 03:07:01
【问题描述】:
在 UI 开发中,我多次处理事件的方式是,当事件第一次出现时 - 我会立即开始处理,但如果有一个处理操作正在进行中 - 在处理另一个事件之前,我会等待它完成。如果在操作完成之前发生了多个事件 - 我只处理最近的一个。
我通常这样做的方式是,我的 process 方法有一个循环,在我的事件处理程序中,我检查一个字段,该字段指示我当前是否正在处理某些东西,如果我正在处理 - 我将当前事件参数放在另一个字段中,该字段基本上是一个项目大小的缓冲区,当当前处理过程完成时 - 我检查是否还有其他事件要处理,然后循环直到完成。
现在这似乎有点太重复了,可能不是最优雅的方式,尽管它似乎对我来说很好用。那么我有两个问题:
- 我需要做的事情有名字吗?
- 是否有一些可重用的同步类型可以为我做到这一点?
我正在考虑在我 included in my toolkit 的 Stephen Toub 的异步协调原语集中添加一些东西。
【问题讨论】:
-
If more than one event occurs before the operation completes - I only process the most recent one.我对此的直觉反应是“反应式扩展”。 -
@StephenCleary Here are several options on how to do that with Rx.
标签: c# asynchronous synchronization task-parallel-library async-await