c# -程序执行流yield/pause/resume

本文关键字:pause resume yield 执行流 程序 | 更新日期: 2023-09-27 18:07:35

你能告诉我c#中是否有一种方法可以暂停和恢复程序执行流程,就像我下面想做的那样?

或者你有一个想法如何保存/加载当前线程调用堆栈?

我正在寻找一个解决方案,不创建新的线程在所有。

public class MyClass : InterruptableClass
{
    int x;
    public void Fn1()
    {
        x = 1;
        this.Interrupt();
        x = 2;
    }
}
static class Program
{
    static void Main()
    {
        MyClass c = new MyClass();
        c.Fn1();
        // Now c.x is 1
        if (c.IsInterrupted)
        {
            c.ResumeExecution();
            // Now c.x is 2
        }
    }
}

不幸的是,我不能保存/重新加载调用堆栈(StackTrace/StackFrame)。

c# -程序执行流yield/pause/resume

您应该使用Events或Locks查看线程和线程同步,这取决于哪种方法适合您的场景。

你可以告诉一个线程等待其他线程或等待一些事件发生使用这些机制,所以当它实际等待时,它将最有可能(取决于操作系统)上下文切换,所以其他线程有工作要做,实际上可以继续工作。

你可能想看看await关键字,它将在c#的下一个版本中引入。

如果您现在需要解决方案,请考虑使用TPL延续(Task.ContinueWith方法)。