(답변은 앞쪽의 ▶︎ 를 누르시면.. 펼쳐서 보실 수 있습니다.)
[4강] Task가 실행될 때, 하나의 Task 블락 안에 있는 코드들은 순서대로 실행이 되는걸로 이해를 하는데, 그렇다면 해당 그림이 같은 블락이 아닌 다른 Task 블락이 있어야 하는 것이 아닌지 궁금합니다! 예를 들어, 아래와 같은 코드가 작성되었을 때, 해당 그림 사이에는 1 Task 블락의 다른 task가 아닌, 2 Task 블락 내부의 task가 들어온다고 이해를 했는데 제가 잘 못 이해한건지 궁금합니다!
[5강] Task 클로저 내에서 weak self를 생략하더라도 메모리 누수 관점에서 문제가 없는 것은 이해가 되었습니다! 다만, GCD를 Task로 전환하는 관점에서 생각해봤는데요. 'self가 해제된 시점'에서 'weak self 사용'한 'GCD 클로저'에서는 내부 동작이 실행되지 않을 것 같은데요. 'self가 해제된 시점'에서 'weak self 미사용'한 'Task 클로저'에서는 내부 동작의 실행이 보장될 것 같은데 제가 이해한게 맞을지 궁금합니다! 길지 않은 비동기 작업이더라도 미세하게 동작 차이가 발생할 수 있는 부분이 아닐까 싶어 질문 드렸습니다!
[5강] weak self 처리 관련하여 질문이 있는데요. Task 클로저의 경우 작업이 끝나는 즉시 내부 클로저가 소멸하기 때문에 클로저 내부에서 캡처된 참조도 해조되어 강한 순환 참조가 발생하지 않는다고 나와있는데, 이는 DispatchQueue에 전달하는 클로저에서도 마찬가지 아닌가요? DispatchQueue에 전달된 클로저도 작업이 완료되면 메모리에서 해제되는 것으로 알고 있어서, 약간의 혼란이 생겼습니다.
[6강] 6강 14분48초에 Task.sleep이 논블락킹(Non-blocking) 방식으로 진행되면서 해당 쓰레드에서 다른일을 처리할 수 있다고 하셨는데, sleep을 처리하는 동안 다른 일을 할 수 있는 예제 코드를 알수 있을까요? 해당 강의 예제 코드에서는 sleep이 끝난 뒤에 코드가 실행되는 예시를 보여주셔서 어떻게 task.sleep 사이의 시간을 활용할 수 있는지 궁금합니다.
[8강] Task.yield()메서드에 대해 질문이 있습니다. 강의를 들으면서 swift concurrency를 적극 활용해보고 있는 중입니다. 코드를 작성하고 나서 테스트 코드를 작성하면서 의문이 생기게 되었는데요,
[17강] 11분20초 부분에서, **"작업의 결과를 모을 때는 하나의 thread에서만 동작하게 됩니다. 예를 들자면 2번 thread 하나에서만 비동기 반복문이 동작하게 되는거에요"**라고 설명을 해 주셨는데, 제가 이해한 바로는 'Swift Concurrency는 thread관점에서 벗어나서, Task라는 작업의 단위를 기준으로 비동기 관리를 한다' 라고 이해하고 있습니다. 때문에, "비동기 반복문에서도 await을 통해 비동기 결과를 받고 있는데, 이 때 특정 thread에 고정된다는 것이 보장 될 수 있는건가?" 하는 궁금증이 생겨서 질문드립니다! 만약 하나의 thread에 고정되어 있다면, group을 통해서 결과가 넘어오게 될 때, 자식 Task중 과도하게 오래걸리는 작업이 있다고 가정하면 비동기 반복문이 실행되는 특정 thread가 계속 blocking되는건가? 하는 의문이 들어서요 !