그냥 코드를
{A작업
3초후 B 작업
C작업} 이렇게 쓰면 결과로
A
C
B 이렇게 나오는데 이게 "기본적으로는 비동기식"인 언어인거 맞지?
근데 async랑 await 쓰면 "기본은 비동기식인데 이 구문을 쓰면 그 부분은 동기식으로 작업해줌" 이거 맞음?
내가 보는 책에서 표현을 어떤 식으로 했냐면
프로그램을 개발하다보면, Future 나 stream 으로 명시된 클래스의 객체를 리턴하는 경우가 여럿 있다.
이들은 비동기작업을 지원하기 위한 목적으로 만들어졌다. (이 부분이 이해가 안감. 기본이 비동기식 아닌가?)
간단히 생각해서 두 개 이상의 작업이 동시에 수행된다고 보면 된다.
await는 Future 혹은 Stream을 리턴하는 함수나 메서드에만 쓸 수 있다.
라고 써져있는데
Future 나 Stream이나 쓰면 얘네도 기본적으로 비동기식으로 작동하는데, async랑 await 구문과 같이 쓰면 동기식으로 쓸 수 있다.
라고 해석하면 맞음?
a, b, c 각각 1분씩 걸리는 작업이 있다고 보면요. 동기적으로는 총 3분이 걸리게 됩니다. 그럼 3분동안 a,b,c와 관련 없는 모든 작업도 일을 못하고 기다리죠. 비동기는 기다리지 말고 먼저 일을 하라는 겁니다. 나는 백그라운드에서 열심히 일을 할테니,,, 그리고 a,b,c도 동시에 작업을 해서 끝나는 순서대로 결괏값을 반환하고요.
await 는 요청한 Task(Future) 이 완료되어 값을 반환할때까지 대기하는거임 동기식으로 작업하는게 아니라
TAP 구조가 .net에서 나온거라서 이거 참고하면 될듯
https://learn.microsoft.com/ko-kr/dotnet/csharp/asynchronous-programming/task-asynchronous-programming-model#BKMK_WhatHappensUnderstandinganAsyncMethod