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

时间:2015-09-05 02:08:44

标签: c# .net multithreading

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

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

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

2 个答案:

答案 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();
 }
}

这样的事情。