Mau*_*wer 6 c# design-patterns pausing-execution cancellation cancellationtokensource
我开始使用ConcellationTokenSource和CancellationToken在框架4.0中提供的协作线程取消模式,我发现它非常有用和简单.
我的目的是为我的应用程序提供类似的优雅和简单的解决方案,但暂停线程而不是取消它们.因为在这种情况下,请求将与监听pause命令不同,我认为像PauseTokenSource和PauseToken这样的东西会很好.所以我的第一个问题是,如果你建议合作暂停的这种模式,或者它是否更好的其他东西.
如果有这样的模式是个好主意,你对这个模式有什么建议或指导吗?目前我认为源应该能够通过ManualResetEvent暂停和取消暂停,并且令牌应该具有对源的引用.它遵循初稿,我希望你能给我一些改进建议.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不创建一个 PauseTokenSource 可以实现的接口,然后发送它而不是 PauseTokens。或者拥有除源之外的令牌实例有什么好处?我没有看到任何...
public interface IPauseToken
{
bool IsPausedRequested { get; }
void WaitUntillPaused();
}
Run Code Online (Sandbox Code Playgroud)
还有对了,WaitUntillPaused,不应该是WaitWhilePaused吗……
| 归档时间: |
|
| 查看次数: |
1050 次 |
| 最近记录: |