2

これがすべて完了しないのはなぜですか?代わりに、例外がキャッチされなかったように、例外をスローします。さらに、「配列の範囲外のインデックス」という例外は意味がありません。

        int n = 3;
        string[] names = new string[] { "sally", "fred", "gina" };
        Task[] myTasks = new Task[n];
        for (int y = 0; y < n; y++)
        {
            myTasks[y] = Task.Factory.StartNew(() =>
            {
                Action<string> action = (name) =>
                {
                    try
                    {
                        throw new Exception(name + ", I bet you can't catch me.");
                    }
                    catch (Exception e)
                    {
                        //I caught you... didn't I?
                    }
                };
                action(names[y]);
            });
        }

        Task.WaitAll(myTasks);
        Console.WriteLine("All tasks complete.");//This line is never reached;
4

2 に答える 2

1

名前のタスクの外に変数を設定することで、それを理解しました

var name = names[y];

タスク内から配列にアクセスする代わりにこれを使用すると、機能します。理由はまだわかりません。

于 2014-08-16T18:39:19.347 に答える