■ Task 클래스 : WhenAll 정적 메소드를 사용해 제공되는 모든 작업들이 완료된 후 처리하기
------------------------------------------------------------------------------------------------------------------------
using System;
using System.Threading;
using System.Threading.Tasks;
#region 값 구하기 - GetValue(taskName)
/// <summary>
/// 값 구하기
/// </summary>
/// <param name="taskName">태스크명</param>
/// <param name="waitTime">대기 시간</param>
/// <returns>값</returns>
private int GetValue(string taskName, int waitTime)
{
Console.WriteLine
(
"태스크명 : {0}, 스레드 ID :{1}, 스레드 풀 사용 여부 : {2}",
taskName,
Thread.CurrentThread.ManagedThreadId,
Thread.CurrentThread.IsThreadPoolThread
);
Thread.Sleep(waitTime);
return DateTime.Now.Millisecond;
}
#endregion
Task<int> task1 = new Task<int>(() => GetValue("Task #1", 3000));
Task<int> task2 = new Task<int>(() => GetValue("Task #2", 2000));
Task<int[]> task3 = Task.WhenAll(task1, task2);
Task exceptionTask = task3.ContinueWith
(
t =>
{
Console.WriteLine
(
"첫번째 반환값 : {0}\n두번째 반환값 : {1}",
t.Result[0],
t.Result[1]
);
},
TaskContinuationOptions.OnlyOnRanToCompletion
);
task1.Start();
task2.Start();
while(!task3.IsCompleted)
{
Console.WriteLine(task3.Status);
Thread.Sleep(500);
}
Console.WriteLine(task3.Status);
Thread.Sleep(5000);
------------------------------------------------------------------------------------------------------------------------
'C# > TPL' 카테고리의 다른 글
[C#/TPL] Task 클래스 : 스로틀링(Throttling) 처리하기 (0) | 2017.09.09 |
---|---|
[C#/TPL] Task<T> 클래스 : Run 정적 메소드 사용하기 (0) | 2017.04.15 |
[C#/TPL] Task 클래스 : WhenAny 정적 메소드를 사용해 제공되는 작업들 중에서 임의 비동기 실행 완료시 처리하기 (0) | 2017.02.07 |
[C#/TPL] Task<T> 클래스 : GetAwaiter 메소드를 사용해 내부 Exception 직접 처리하기 (0) | 2017.02.07 |
[C#/TPL] Task<T> 클래스 : AggregationException 발생시 처리하기 (0) | 2017.02.07 |
[C#/TPL] Task 클래스 : WhenAll 정적 메소드를 사용해 제공되는 모든 작업들이 완료된 후 처리하기 (0) | 2017.02.07 |
[C#/TPL] Task 클래스 : WhenAll 정적 메소드를 사용해 제공되는 모든 작업들이 완료된 후 에러 발생시 처리하기 (0) | 2017.02.07 |
[C#/TPL] Task<T> 클래스 : 자식 태스크 실행하기 (0) | 2017.02.07 |
[C#/TPL] TaskAwaiter 클래스 : OnCompleted 메소드를 사용해 연속(Continuation) 완료시 처리하기 (0) | 2017.02.07 |
[C#/TPL] TaskAwaiter 클래스 : OnCompleted 메소드를 사용해 연속(Continuation) 완료시 처리하기 (0) | 2017.02.07 |
[C#/TPL] Task<T> 클래스 : ContinueWith 메소드를 사용해 연속(Continuation) 사용하기 (0) | 2017.02.07 |
댓글을 달아 주세요