【发布时间】:2009-04-27 21:14:32
【问题描述】:
我正在尝试创建一个类,它允许我调用具有指定超时的方法。我有实际的超时实现工作,但无法成功地将它封装到一个类中。
此时我已决定将自己限制为仅使用 5 个 Action 委托来对采用 0 - 4 个参数的方法设置超时。出于这个问题的目的,我将使用 Action 的一个参数变体。
我理想的调用语法是这样的:
Action<int> a = new TimeoutAction(i => i + 1)
{
Timeout = Timespan.FromSeconds(10)
}
或者这个:
Action<int> a = (x => x + 1).Timeout(Timespan.FromSeconds(10))
我几乎可以肯定第一个版本是不可能的,因为没有办法从委托继承。第二种方法可以通过在 Delegate 类型上使用扩展方法来实现。
最后的后备方法是创建静态方法,接收适当的委托类型并返回具有相同签名但包含超时的委托。
有什么建议或想法吗?
【问题讨论】: