【发布时间】:2012-01-22 17:15:42
【问题描述】:
关键监听器中的动态评估
public class KeyUpper {
Func<Key, bool> _evaluate;
public void RegisterEvaluator(Func<Key, bool> evaluate){
_evaluate = evaluate;
}
public void KeyUp(object sender, KeyEventArgs e){
if (_evaluate(e.KeyCode))
SomeResponse();
}
public void SomeResponse(){
// ...
}
}
这个 Lambda 应该在每一行等待
keyUpper.RegisterEvaluator(key =>
{
if (key == Key.A)
if (key == Key.W)
if (key == Key.A)
return true;
}
);
- 即客户端代码将对同一
key参数提供一系列评估,并期望每一行评估都将被等待,以便在 1:A 2:W 3:A 的一系列 keyup 事件之后调用 SomeResponse() - 显然目前这永远不会发生,因为该方法一直运行到最后,而
key == Key.W永远不会为真 - 这可能是不可能的,但是有没有办法让方法调用在它评估为 false 时自动从下一行返回,但在该行评估为 true 之前返回它,然后一直到之后的行,然后到方法结束之前的那一行?
- 即是否有一种简单的方法来提供这种可等待的 lambda 表达式?
【问题讨论】:
-
我不确定这里的问题是什么,这与 await 有什么关系。
-
这个问题很难解释,严格来说它与
await或Tasks无关,尽管从概念上讲我要寻找的是等待功能 -
@cel - 你听说过响应式扩展吗?
-
@DanielA.White 我有点用 RX,但是您如何订阅订单要求 - 例如,您如何一般在 A 之后指定 W?
标签: c# .net delegates lambda async-await