- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我开始使用框架 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/
这是我正在使用的代码。我想要的是当屏幕出现时,while循环中的代码运行。当屏幕消失时,我需要它停止。有人可以就我是否正确使用 CancellationTokenSource 来提供此功能的建议。我还
假设我创建了一个任务 bool aBoolean = true; Task.Factory.StartNew(() => while(aBooloean) { ...
有人可以举个例子,我应该使用带有三个参数的下一个方法。 var tokenSource = new CancellationTokenSource(); var token = tokenSource
我有一个这样的 Worker 类: public class Worker { private List _someObjectList = null; public Worker(S
在这种情况下,如果用户按回车键取消任务,则由 ContinueWith Hook 的其他任务将运行,但根据 AggregateException,情况并非如此 尽管 ContinueWith 中的显式
这个问题在这里已经有了答案: When to dispose CancellationTokenSource? (7 个答案) 关闭 9 年前。 我应该什么时候处理 CancellationToke
CancellationTokenSource 类是一次性的。快速查看 Reflector 证明使用了 KernelEvent,这是一种(很可能)非托管资源。由于 CancellationTokenS
我有一个这样的应用程序: 我有一个应用程序,其中一部分代码在带有计时器延迟的循环中运行。在申请开始时,我声明: public static CancellationTokenSource tokenS
正如我阅读文档 CancellationTokenSource.Cancel 不应该抛出异常。 CancellationTokenSource.Cancel 在 cts.Cancel() 调用下方;导
我开始在 MacBook Pro 上使用 Xamarin Studio 进行 Xamarin.Forms 开发。我构建了一个应用程序,其目的是查询 PrestaShop 网站、检索产品并显示它们。 在
正如我阅读文档 CancellationTokenSource.Cancel 不应该抛出异常。 CancellationTokenSource.Cancel 在 cts.Cancel() 调用下方;导
我有一个接受 CancellationToken 的方法,该方法允许该方法的用户取消其正在执行的操作。在该方法中,我使用此 CancellationToken 以及 CancellationToken
static void Main(string[] args) { CancellationTokenSource cts = new CancellationTokenSou
我正在尝试根据这篇文章实现一些重试逻辑(但有任务) Cleanest way to write retry logic? 重试逻辑的想法是在给定的时间后执行第二个任务触发取消 void Main()
我想知道使用 CancellationTokenSource 结束循环任务和退出标志之间是否有任何区别 CancellationTokenSource: CancellationTokenSource
我想知道使用 CancellationTokenSource 结束循环任务和退出标志之间是否有任何区别 CancellationTokenSource: CancellationTokenSource
我看到这段代码在我面前,我很怀疑: CancellationTokenSource _cts; public void Dispose(); { _cts.Cancel(); _cts
发布Async Targeting Pack提示我使用 ILSpy看看是什么Task-based Asynchronous Pattern (TAP)那里提供了扩展方法(其中一些我已经自己实现用于 V
这与我的另一个问题有关How to cancel background printing . 我试图更好地理解 CancellationTokenSource 模型以及如何跨线程边界使用它。 我有一个
例如,如果我想取消 Dispose() 中的某个操作调用(其中 can be called multiple times ),然后我需要写 public void Dispose() { if
我是一名优秀的程序员,十分优秀!