왼쪽은 -1이 들어있는 공간(Node, 우측 클래스) 5개를 만든 후 두 개의 Task를 사용하여 공간을 1 혹은 2로 채우는 함수야.

첫번째 Task는 공간의 왼쪽부터 오른쪽으로 1을 채워나가고, 두번때 Task는 공간의 오른쪽부터 왼쪽으로 2를 채워나가.

두 Task는 공간이 -1이 아니면(1 혹은 2가 채워져 있으면) 멈춰.


공간을 5개 설정해두면 랜덤으로 [1][1][1][2][2] 혹은 [1][1][2][2][2]로 채워져.

이때 질문


1. 왼쪽 빨간 상자 안의 lock는 꼭 필요해? 두 Task가 동시에 3번째(중간) 노드에 접근하지 말라고 해둔 건데, 없어도 정상작동은 하더라고.

2. Task.Delay는 그냥 Task를 블록 상태로 만들고 싶어서 둔 건데, 1밀리초 기다리기 이런 거 없이 바로 블록상태로 만들 수는 없나?

3. 왼쪽 초록 상자의 Sleep은 비동기 Task가 끝난 후 Node들의 값을 읽어오기 위해 둔건데, 비동기 Task의 완료는 변수 참조같은 외부적인 방법 말고는 알림을 받을 수 없나?


아직 관련 개념이 부족해서 질문도 맞게 한건지 모르겠다... 질문이 좀 이상하더라도 이해해줘.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec82fa11d02831da48f5f7e7e334e6e7e5eac8fadd62f9ddc835d0f9332a2ec33dea40e10276fc16be207d6cfc52d44a6c58099af06b8f797b