C# - 程序执行流程产量/暂停/恢复

时间:2011-09-04 10:31:49

标签: execution yield flow resume

请告诉我,如果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)。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

相关问题