[英]How can I preserve and later resume a thread's execution state?
我有一个不寻常的场景,我需要能够暂停并稍后恢复线程的执行状态,可能在不同的线程上恢复它。
有两个函数完全符合我的要求, Thread.GetCompressedStack
和Thread.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.