... | ... | @@ -424,7 +424,7 @@ else |
|
|
|
|
|
## 질문사항
|
|
|
|
|
|
1. await를 사용하면 항상 쓰레드가 자동으로 만들어지는가?
|
|
|
**1. await를 사용하면 항상 쓰레드가 자동으로 만들어지는가?**
|
|
|
|
|
|
await가 보장하는 것은, Task가 UI Thread에 돌던지, Worker thread에서 돌던지 상관없이 Task 완료 후 await 이후의 실행문들을 디폴트로 원래 await를 실행하기 전의 Thread에서 실행하도록 보장하는 것이다.
|
|
|
|
... | ... | @@ -437,8 +437,8 @@ else |
|
|
**MSDN 참고**
|
|
|
The async and await keywords don't cause additional threads to be created. Async methods don't require multithreading because an async method doesn't run on its own thread. The method runs on the current synchronization context and uses time on the thread only when the method is active.
|
|
|
|
|
|
<br />
|
|
|
2. await Task.Delay() 했을때와 await fs.ReadAsync() 했을 때 blocking 동작이 다른 이유는 무엇인가?
|
|
|
|
|
|
**2. await Task.Delay() 했을때와 await fs.ReadAsync() 했을 때 blocking 동작이 다른 이유는 무엇인가?**
|
|
|
|
|
|
```c#
|
|
|
class AsyncTimeTest
|
... | ... | @@ -488,8 +488,8 @@ class AsyncTimeTest |
|
|
}
|
|
|
```
|
|
|
|
|
|
<br />
|
|
|
3. 한 메소드 안에 await가 두개 이상이면 어떻게 동작하는가?
|
|
|
|
|
|
**3. 한 메소드 안에 await가 두개 이상이면 어떻게 동작하는가?**
|
|
|
|
|
|
```c#
|
|
|
class MultiAwaitTest
|
... | ... | @@ -530,19 +530,18 @@ class MultiAwaitTest |
|
|
}
|
|
|
}
|
|
|
```
|
|
|
<br />
|
|
|
|
|
|
4. Task에 대한 스터디 보강 (thread는 리턴값이 있는가? Task와 thread 차이는 무엇인가? 왜 Task 타입을 정의했을까?)
|
|
|
|
|
|
**4. Task에 대한 스터디 보강 (thread는 리턴값이 있는가? Task와 thread 차이는 무엇인가? 왜 Task 타입을 정의했을까?)**
|
|
|
다시 한 번 정리하기.
|
|
|
|
|
|
<br />
|
|
|
|
|
|
5. Random 클래스의 seed 역할은 무엇인가?
|
|
|
**5. Random 클래스의 seed 역할은 무엇인가?**
|
|
|
그냥 Random() 메서드가 발생시키는 난수는 항상 규칙적이다. 이를 의사 난수(pseudo-random number) 라고 한다. 의사 난수는 seed 값에 따라서 결과값이 달라지는데, 이 seed 값이 같으면 매번 같은 결과값이 나온다. 그래서 보통 seed 값에 시간을 넣어 Random() 결과가 시간의 흐름에 따라 계속해서 다르게 출력되는 식으로 이용한다. 이와 같은 방법으로 우리가 흔히 생각하는 의미(실행 할 때마다 값이 다르게 나오는)의 난수를 구현한다.
|
|
|
|
|
|
<br />
|
|
|
|
|
|
6. 람다식의 변수 스코프는?
|
|
|
|
|
|
**6. 람다식의 변수 스코프는?**
|
|
|
람다 식은 람다 함수를 정의하는 메서드 범위 내에 있거나 람다 식을 포함하는 형식 범위 내에 있는 외부 변수를 참조할 수 있습니다. (MSDN)
|
|
|
Free Variable(밑의 코드에서는 j)가 스택에서 사라지는 현상을 막기위해서 C# 컴파일러는 자체적으로 nested class를 만들어서 Free Variable을 필드, 람다 식을 메서드로 저장한다. 그러면 힙에 저장되기 때문에 계속해서 상태가 유지될 수 있다. 더 이상 참조하는 객체가 없으면 이 Nested class는 GC에 의해 해제된다.
|
|
|
|
... | ... | @@ -591,9 +590,8 @@ class LambdaScope |
|
|
}
|
|
|
```
|
|
|
|
|
|
<br />
|
|
|
|
|
|
7. IEnumerable<T> 변수를 foreach 키워드로 순회하도록 변경 바랍니다.
|
|
|
**7. IEnumerable<T> 변수를 foreach 키워드로 순회하도록 변경 바랍니다.**
|
|
|
Func<string, string> selector = (string s) => s.ToUpper();
|
|
|
|
|
|
string[] words = {"orange", "apple", "Article", "elephant", "korea", "komani" };
|
... | ... | @@ -605,8 +603,9 @@ class LambdaScope |
|
|
|
|
|
|
|
|
출처: http://it-jerryfamily.tistory.com/entry/dasdasd [IT 이야기]
|
|
|
8. Where().FirstOrDefault() 하지 말고 곧장 FirstOrDefault() 할 수 없나요?
|
|
|
9. Network endian 스터디 보강
|
|
|
10. ContinueWhenAny 메소드 스터디 보강
|
|
|
11. stread.Read 메소드를 while 루프로 여러번 읽는 이유는? (TCP stream 이야기)
|
|
|
12. LINQ 결과인 IEnumerable<T>를 for 문으로 루프 돌때, breakpoint 걸어서 확인해보기 |
|
|
\ No newline at end of file |
|
|
**8. Where().FirstOrDefault() 하지 말고 곧장 FirstOrDefault() 할 수 없나요?**
|
|
|
**9. Network endian 스터디 보강**
|
|
|
**10. ContinueWhenAny 메소드 스터디 보강**
|
|
|
**11. stread.Read 메소드를 while 루프로 여러번 읽는 이유는? (TCP stream 이야기)**
|
|
|
**12. LINQ 결과인 IEnumerable<T>를 for 문으로 루프 돌때, breakpoint 걸어서 확인해보기**
|
|
|
|
|
|
\ No newline at end of file |