... | ... | @@ -475,6 +475,13 @@ class AsyncTimeTest |
|
|
}
|
|
|
```
|
|
|
3. 한 메소드 안에 await가 두개 이상이면 어떻게 동작하는가?
|
|
|
|
|
|
좀 더 자세히 설명하자면 await 키워드가 사용되고 어떤 Task를 기다려야 한다면, await 키워드가 사용된 당시의 SynchronizationContext 객체를 기억해 둡니다. 그리고 나중에 그 Task가 종료되면 기억해 두었던 SynchronizationContext를 이용하여 스레드 동기화 작업을 수행하지요.
|
|
|
SynchronizationContext 는 WinForm, WPF, ASP.NET 환경에서 설정되는 동기화 객체로서 어떤 작업이 특정 스레드에서 수행되도록 해줍니다. WinForm, WPF의 경우 UI 스레드를 위한 SynchronizationContext 객체가 제공됩니다. 따라서 await 키워드를 사용한 코드가 UI 스레드라면 SynchronizationContext 가 기억될 것이고 await 키워드의 다음에 나타나는 코드는 UI 스레드에서 수행되도록 동기화 되는 것이지요.
|
|
|
|
|
|
Console 어플리케이션 같은 경우 이러한 SynchronizationContext가 없기 때문에 await 이후의 코드는 다른 스레드에서 수행될 가능성이 높습니다.
|
|
|
|
|
|
|
|
|
4. Task에 대한 스터디 보강 (thread는 리턴값이 있는가? Task와 thread 차이는 무엇인가? 왜 Task 타입을 정의했을까?)
|
|
|
5. Random 클래스의 seed 역할은 무엇인가?
|
|
|
6. 람다식의 변수 스코프는?
|
... | ... | |