0

你能告诉我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)。

4

2 回答 2

0

您应该使用事件或锁查看线程和线程同步,具体取决于哪个适合您的场景。

您可以使用这些机制告诉线程等待其他线程或等待某些事件发生,以便在它实际等待时它很可能(取决于操作系统)被上下文切换,因此其他线程有工作要做,实际上可以继续工作。

于 2011-09-04T10:35:27.203 回答
0

您可能想看看await将在下一版本的 C# 中引入的关键字。

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

于 2011-09-04T10:45:17.410 回答