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

どちらがシナリオに適しているかに応じて、イベントまたはロックを使用してスレッドとスレッド同期を調べる必要があります。

これらのメカニズムを使用して、スレッドに他のスレッドを待機するか、何らかのイベントが発生するまで待機するように指示できます。これにより、実際に待機している間、(OS に応じて) コンテキストがスイッチアウトされる可能性が高くなり、他のスレッドが処理を行うようになります。実際に仕事を進めることができます。

于 2011-09-04T10:35:27.203 に答える
0

await次のバージョンの C# で導入されるキーワードを確認することをお勧めします。

今すぐ解決策が必要な場合は、TPL 継続 (Task.ContinueWithメソッド) の使用を検討してください。

于 2011-09-04T10:45:17.410 に答える