-1

基本的にこれは私がテストしてきたコードです

static void Main(string[] args)
{
    var result = 0;

    EventWaitHandle calcDone = new EventWaitHandle(false, EventResetMode.ManualReset);

    ThreadPool.QueueUserWorkItem((x) => { result += GetNumer(); calcDone.Set(); });

    var result2 = 15;

    calcDone.WaitOne();

    result += result2;

    Console.WriteLine(result2);
}

static int GetNumer()
{
    Thread.Sleep(2000);
    return 2000;
}

したがって、基本的には 2015 がコンソール ウィンドウに書き込まれると予想されますが、そうではなく、15 だけが出力されます。WaitOne結果が返されてインクリメントされるまでGetNumber実行が停止されるため、正常に動作していますが、その後何が起こるかわかりません。コードをデバッグして段階的に進めれば問題ありませんが、コードを実行すると 15 が出力されます。タスクではなくスレッド プールを使用する理由を聞かないでください。これはテスト目的のためだけです。

4

1 に答える 1

3

「result2」変数を変更する唯一のコード行はvar result2 = 15;. その後、変数result2をインクリメントしている間は 15のままです。result

PS「result2」や「variable4」などの変数に名前を付けるべきではない理由の優れた例。

于 2014-06-08T11:13:50.760 に答える