0

集約例外が実行されないということはありません

namespace ExceptionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Task<int> t1 = new Task<int>(() => Add());
            try
            {
                t1.Start();
            }
            catch (AggregateException ag)
            {
                Console.WriteLine(ag.Message);
            }
            Console.ReadLine();
        }
        static int Add()
        {
            try
            {
                throw new ArgumentException("Exception");
            }
            catch(Exception e) { throw e; }

        }
    }
}
4

1 に答える 1

2

Start()絶対にこんな状況にはなりません。を開始するだけTaskで、すぐに戻ります。Taskが完了するまで待機しません。

例外をキャッチしたい場合は、次を使用する必要がありますWait()

Task<int> t1 = Task.Factory.StartNew(() => Add());
try
{
    t1.Wait();
}
catch (AggregateException ag)
{
    Console.WriteLine(ag.Message);
}

を使用する場合は、コンストラクターの代わりに(または.Net 4.5 で) をWait()使用できます。また、もう必要ありません。(両方の変更が上記のコードに反映されています。)Task.Factory.StartNew()Task.Run()Start()Console.ReadLine()

于 2012-08-19T14:55:25.750 に答える