首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延长WaitHandle.WaitOne超时时间

延长WaitHandle.WaitOne超时时间
EN

Stack Overflow用户
提问于 2015-05-21 14:20:48
回答 1查看 351关注 0票数 0

框架中是否有一种现有的类型,可以让我做一些类似下面的例子?基本上,我想要增加超时时间的能力。

代码语言:javascript
复制
MagicWaitHandle waitHandle;

Main()
{
 var fooBar = new FooBar();
 fooBar.OnEvent += HandleEvent;
 fooBar.Start(); // starts new thread

 waitHandle.WaitOne(new TimeSpan(0,1,0)); // suspend
}

HandleEvent(Foo f)
{
 if(f.SomeCondition) waitHandle.ExtendWaitPeriodBy(new TimeSpan(0,1,0)); // extend
 else if(f.OtherCondition) waitHandle.Set(); // signal
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-21 15:34:51

框架中没有任何东西能提供您所要求的内容。不过,您可以为WaitHandle编写一个装饰器,然后使用它。

下面的伪代码可以帮助您启动实现。

代码语言:javascript
复制
public class MagicWaitHandle : WaitHandle
{
    private readonly WaitHandle inner;
    public MagicWaitHandle(WaitHandle inner)
    {
        if (inner == null) throw new ArgumentNullException("inner");
        this.inner = inner;
        this.SafeWaitHandle = inner.SafeWaitHandle;
    }

    public override bool WaitOne(TimeSpan timeout)
    {
        if (!base.WaitOne(timeout) )
        {
            if (<needs Apply Extended Timeout>)
            {
                return base.WaitOne(extendedTimeSpan);
            }
        }
        return false;
    }

    public override bool WaitOne(TimeSpan timeout, bool exitContext)
    {
        if (!base.WaitOne(timeout, exitContext))
        { 
            if (<needs Apply Extended Timeout>)
            {
                return base.WaitOne(extendedTimeSpan, exitContext);
            }
        }
        return false;
    }

    public void ExtendWaitPeriodBy(TimeSpan timeSpan)
    {
        //...
    }
}

确保在实现时考虑线程安全。一旦您完成了MagicWaitHandle的实现,您就可以使用它作为

代码语言:javascript
复制
MagicWaitHandle magicHandle = new MagicWaitHandle(new ManualResetEvent(false));
...
magicHandle.WaitOne(timeout);

其他代码中的位置

代码语言:javascript
复制
magicHandle.ExtendWaitPeriodBy(extensionTimeout);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30376525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档