... | @@ -114,8 +114,48 @@ class BCLAsyncTest2 //TCP 서버 비동기 통신 예제 |
... | @@ -114,8 +114,48 @@ class BCLAsyncTest2 //TCP 서버 비동기 통신 예제 |
|
```
|
|
```
|
|
|
|
|
|
### Task, Task<TResult> 타입
|
|
### Task, Task<TResult> 타입
|
|
|
|
Async 메서드의 반환값은 모두 Task 또는 Task<TResult> 유형이다. Task 타입은 반환값이 없는 경우 사용되고, Task<TResult> 타입은 TResult 형식 매개변수로 지정된 반환값이 있는 경우로 구분된다.
|
|
|
|
|
|
|
|
```c#
|
|
|
|
class TaskType
|
|
|
|
{
|
|
|
|
public static void Main()
|
|
|
|
{
|
|
|
|
//스레드 풀에서
|
|
|
|
ThreadPool.QueueUserWorkItem((obj) => { Console.WriteLine("process workitem"); }, null);
|
|
|
|
|
|
|
|
Task task1 = new Task(() => { Console.WriteLine("process taskitem"); });
|
|
|
|
|
|
|
|
task1.Start();
|
|
|
|
|
|
|
|
Task task2 = new Task((obj) => { Console.WriteLine("process taskitem(obj)"); }, null);
|
|
|
|
|
|
|
|
task2.Start();
|
|
|
|
|
|
|
|
task1.Wait(); //task1의 작업이 끝날 때까지 현재 스레드를 대기한다.
|
|
|
|
task2.Wait();
|
|
|
|
|
|
|
|
//task 객체를 생성할 필요 없이 바로 작업 시작 가능.
|
|
|
|
Task.Factory.StartNew(() => { Console.WriteLine("process taskitem StartNew"); });
|
|
|
|
|
|
|
|
//Task<TResult> 타입은 값을 반환할 수 있다.
|
|
|
|
Task<int> task3 = new Task<int>(() =>
|
|
|
|
{
|
|
|
|
Random rand = new Random((int)DateTime.Now.Ticks);
|
|
|
|
return rand.Next();
|
|
|
|
}
|
|
|
|
);
|
|
|
|
task3.Start();
|
|
|
|
task3.Wait();
|
|
|
|
Console.WriteLine("무작위 숫자 값 : " + task3.Result);
|
|
|
|
|
|
|
|
//StartNew<TResult> 도 반환.
|
|
|
|
Task<int> taskReturn = Task.Factory.StartNew<int>(() => 255);
|
|
|
|
taskReturn.Wait();
|
|
|
|
Console.WriteLine(taskReturn.Result);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|