类似于CancellationTokenSource和CancellationToken模式的暂停线程模式吗?

| 我开始使用框架4.0中由ConcellationTokenSource和CancellationToken提供的协作线程取消模式,我发现它非常有用和简单。 现在,我的目的是向我的应用程序提供类似的优雅且简单的解决方案,但用于暂停线程而不是取消线程。因为在这种情况下,由于请求与侦听暂停命令不同,因此我认为拥有PauseTokenSource和PauseToken之类的东西会很好。因此,我的第一个问题是,您是否建议采用这种合作暂停模式,还是更好的选择? 如果有这样一种模式是个好主意,那么您对此有任何建议或指导吗?目前,我认为Source应该能够通过ManualResetEvent暂停和取消暂停,并且令牌应该具有对Source的引用。它遵循了初稿,希望您可以为我提供一些改进建议。
public class PauseTokenSource
{
    protected ManualResetEvent mre = new ManualResetEvent(true);
    object syncRoot = new object();

    public PauseToken PauseToken { get { return new PauseToken(this); } }

    public bool IsPauseRequested { get { return !mre.WaitOne(0); } }

    public void Pause()
    {
        mre.Reset();
    }

    public void UnPause()
    {
        mre.Set();
    }

    public void WaitUntillPaused()
    {
        mre.WaitOne();
    }
}

public class PauseToken
{
    private PauseTokenSource source;

    public PauseToken(PauseTokenSource source)
    {
        this.source = source;
    }

    public bool IsPauseRequested 
    { 
        get { return source != null && source.IsPauseRequested; } 
    }

    public void WaitUntillPaused()
    {
        if (source != null)
            source.WaitUntillPaused();
    }
}
    
已邀请:
为什么不建立一个PauseTokenSource可以实现的接口,并发送它而不是PauseTokens。或拥有源以外的令牌实例有什么好处?我没看到...
public interface IPauseToken 
{
    bool IsPausedRequested { get; }
    void WaitUntillPaused();
}
顺便说一下,WaitUntillPaused,如果不是WaitWhilePaused ...     

要回复问题请先登录注册