■ 태스크 예외 처리하기

----------------------------------------------------------------------------------------------------

using System;

using System.Threading;

using System.Threading.Tasks;

 

...

 

#region 테스트 처리하기 - Test(taskName, secondCount)

 

/// <summary>

/// 테스트 처리하기

/// </summary>

/// <param name="taskName">태스크명</param>

/// <param name="secondCount">초 카운트</param>

/// <returns>처리 결과</returns>

private static int Test(string taskName, int secondCount)

{

    Console.WriteLine

    (

        "[{0} 스레드] 실행 태스크 : {1}, 스레드 풀 스레드 여부 : {2}",

        Thread.CurrentThread.ManagedThreadId,

        taskName,

        Thread.CurrentThread.IsThreadPoolThread

    );

    

    Thread.Sleep(TimeSpan.FromSeconds(secondCount));

 

    throw new Exception("고의적인 예외");

 

    // 실행되지 않는다.

    return secondCount;

}

 

#endregion

 

...

 

Task<int> task;

 

try

{

    task = Task.Run(() => Test("태스크 1", 2));

 

    int result = task.Result;

 

    Console.WriteLine("태스크 결과 : {0}", result);

}

catch(Exception exception)

{

    Console.WriteLine("발생 예외 :");

    Console.WriteLine("--------------------------------------------------");

    Console.WriteLine("Exception caught : {0}", exception);

    Console.WriteLine("--------------------------------------------------");

}

 

Console.WriteLine();

Console.WriteLine();

Console.WriteLine();

 

try

{

    task = Task.Run(() => Test("태스크 2", 2));

 

    int result = task.GetAwaiter().GetResult();

 

    Console.WriteLine("태스크 결과 : {0}", result);

}

catch(Exception exception)

{

    Console.WriteLine("발생 예외 :");

    Console.WriteLine("--------------------------------------------------");

    Console.WriteLine("Exception caught : {0}", exception);

    Console.WriteLine("--------------------------------------------------");

}

 

Console.WriteLine();

Console.WriteLine();

Console.WriteLine();

 

Task<int> task3 = new Task<int>(() => Test("태스크 3", 3));

Task<int> task4 = new Task<int>(() => Test("태스크 4", 2));

 

Task<int[]> task5 = Task.WhenAll(task3, task4);

 

Task task6 = task5.ContinueWith

(

    t =>

    {

        Console.WriteLine("발생 예외 :");

        Console.WriteLine("--------------------------------------------------");

        Console.WriteLine("Exception caught : {0}", t.Exception);

        Console.WriteLine("--------------------------------------------------");

    },

    TaskContinuationOptions.OnlyOnFaulted

);

 

task3.Start();

task4.Start();

 

Thread.Sleep(TimeSpan.FromSeconds(5));

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요