繁体   English   中英

如何保留并稍后恢复线程的执行状态?

[英]How can I preserve and later resume a thread's execution state?

我有一个不寻常的场景,我需要能够暂停并稍后恢复线程的执行状态,可能在不同的线程上恢复它。

有两个函数完全符合我的要求, Thread.GetCompressedStackThread.SetCompressedStack ,但两个都被弃用,没有提供替代方案。 MSDN引用CompressedStack.Capture ,但它不允许恢复捕获的堆栈。

我有什么方法可以做到这一点吗?

您可以暂停和恢复TASKS,但不能更改其线程。

但是你可以在不同的任务中链接操作,我的意思是,你可以将你的例程分成几部分并一起处理,等待他们的答案开始最后的任务 - 我描述的所有操作都可以被暂停和/或链接以启动任务只有结果已经可用。

如果问题与此相关,您还可以监视资源以暂停和继续执行任务。

请参阅以下内容的完整描述:

https://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx

CompressedStack不是CLR执行堆栈。 不做你想要的。

基本上,你不能按字面意思这样做。

但是,感谢await ,如果您可以完成整个调用链返回Task ,那么您可以这样做。 您可以使用PauseToken暂停任何任务。 您的代码将如下所示:

async Task MyCode(PauseToken pt) {
 while (true) {
  await DoSomething();
  await pt.WaitWhilePausedAsync();
 }
}

这样的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM