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

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

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

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

最佳答案 CompressedStack不是CLR执行堆栈.不做你想要的.

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

但是,感谢等待,如果您可以使整个调用链返回任务,则可以执行此操作.您可以使用PauseToken暂停任何任务.您的代码将如下所示:

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

这样的事情.

点赞