我有一个不寻常的场景,我需要能够暂停并稍后恢复线程的执行状态,可能会在不同的线程上恢复它。
有两个功能完全符合我的要求Thread.GetCompressedStack
和Thread.SetCompressedStack
,但两者都已弃用,并且没有提供替代方案。 MSDN引用CompressedStack.Capture
,但它不允许恢复捕获的堆栈。
我有什么方法可以做到这一点吗?
答案 0 :(得分:1)
您可以暂停和恢复TASKS,但不能更改其线程。
但你可以在不同的任务中链接操作,我的意思是,你可以将你的例程分成几部分并一起处理,等待他们的答案开始最后的任务 - 我描述的所有操作都可以暂停和/或链接到只有在结果已经可用时才开始执行任务。
如果问题与此相关,您还可以监控暂停和继续执行任务的资源。
请参阅以下内容的完整可能性描述:
https://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx
答案 1 :(得分:1)
CompressedStack
不是CLR执行堆栈。不做你想做的事。
基本上,你不能按字面意思这样做。
感谢await
,如果您可以使整个调用链返回Task
,则可以执行此操作。您可以使用PauseToken
暂停任何任务。您的代码将如下所示:
async Task MyCode(PauseToken pt) {
while (true) {
await DoSomething();
await pt.WaitWhilePausedAsync();
}
}
这样的事情。