반응형
public static void TaskTest()
{
Console.WriteLine("========= Task start =========");
Task.Run(() => IniniteFunction());
// LongRunning 옵션을 사용하여 Threadpool이 아닌 별도의 Thread에서 동작되도록함
Console.WriteLine("Task1 start");
Task task1 = new Task(IniniteFunction, TaskCreationOptions.LongRunning);
task1.Start();
// async로 동작
Console.WriteLine("Task2 start");
Task.Run(() => Function2(5, 7));
// wait를 사용하거나 Result를 사용시 Sync로 동작되며 소요되는 시간만큼 기다리게됨
Console.WriteLine("Task3 start");
Task<string> task3 = Task.Run(() => Function2(5, 7));
task3.Wait();
Console.WriteLine(task3.Result);
// async로 동작되지만 완료 이벤트에서 결과 확인이 가능함
Console.WriteLine("Task4 start");
Task<string> task4 = Task.Run(() => Function2(5, 7));
task4.GetAwaiter().OnCompleted(() =>
{
Console.WriteLine("Task4 Done");
Console.WriteLine(task4.Result);
});
Console.WriteLine("========= Task End =========");
}
private static void IniniteFunction()
{
int num = 0;
while (true)
{
Thread.Sleep(10);
num++;
}
}
private static string Function2(int v1, int v2)
{
Thread.Sleep(3000);
int sum = v1 + v2;
return $"Function2 result : v1 : {v1} , v2 : {v2} , sum : {sum}";
}
반응형
'[====== Development ======] > C#' 카테고리의 다른 글
[WPF] ListView에 text 컬럼과 UserControl 컬럼 추가 (0) | 2021.11.23 |
---|---|
[WPF] Exception이 발생해도 Application이 죽지 않도록 하는 방법 (0) | 2021.11.17 |
[WPF] Window나 UserControl 생성자에서 디자인타임에 실행방지 (0) | 2021.11.09 |
[WPF] 현재 UserConsole이 속한 Window 를 가져오는 방법 (0) | 2021.11.09 |
[WPF ] ConvertWriteableBitmapToBitmapImage (0) | 2021.11.04 |