2011-09-04 99 views
0

請問如果C#中有一種方法可以暫停和恢復程序執行流程,請按照以下方法進行操作?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)。

回答

0

您應該使用事件或鎖定來查看線程和線程同步,具體取決於哪些適用於您的場景。

您可以告訴線程等待其他線程或等待某些事件發生時使用這些機制,以便在實際等待時它很可能(取決於操作系統)上下文切換,所以其他線程有工作要做,實際上可以繼續工作。

0

您可能想看看await關鍵字,該關鍵字將在下一個版本的C#中引入。

如果您現在需要解決方案,請考慮使用TPL延續(Task.ContinueWith方法)。

+0

你是對的,但TPL使用新的主題。我需要一個不需要創建新線程的解決方案。 – user927432