gpt4 book ai didi

c# - 一种类似于 CancellationTokenSource 和 CancellationToken 模式的暂停线程模式?

转载 作者:太空狗 更新时间:2023-10-29 22:01:45 24 4
gpt4 key购买 nike

我开始使用框架 4.0 中由 ConcellationTokenSource 和 CancellationToken 提供的协作线程取消模式,我发现它非常有用且简单。

我现在的目的是为我的应用程序提供一个类似的优雅和简单的解决方案,但用于暂停线程而不是取消它们。由于在这种情况下,请求将不同于监听暂停命令,我认为拥有类似 PauseTokenSource 和 PauseToken 的东西会很好。所以我的第一个问题是,您是否建议采用这种合作暂停模式,或者它是否更好。

如果拥有这样的模式是个好主意,您对如何去做有什么建议或指南吗?目前我认为源应该能够通过 ManualResetEvent 暂停和取消暂停,并且 token 应该有对源的引用。它遵循初稿,希望您能给我提出改进建议。

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 可以实现的接口(interface),并发送它而不是 PauseTokens。或者拥有源以外的 token 实例有什么好处?我没有看到任何...

public interface IPauseToken 
{
bool IsPausedRequested { get; }
void WaitUntillPaused();
}

还有WaitUntillPaused,应该不是WaitWhilePaused...

关于c# - 一种类似于 CancellationTokenSource 和 CancellationToken 模式的暂停线程模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5754486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com