[C#] async/await
๊ทธ๊ฑฐ ์๋๊ฐ?
์ฐ๋ฆฌ๊ฐ Nodejs ๋ฑ์์ ํํ๋ค ์ฌ์ฉํ๋ async/await ์ ํ์ค๋ ๋ท๋ท์์ ์ฒ์ ๋ง๋ค์ด๋ธ ๊ฒ์ด๋ค.
์ ๊ตฌ์์ธ ๋งํผ, C#๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์์ด์๋ ๋ฐ์ด๋ ๋ชจ์ต์ ๋ณด์ฌ์ค๋ค.
async/await์ 2012๋
8์, C# 5.0๋ถํฐ ์ง์๋์๋ค.
์ด์ง๊ฐํ ๋ ๊ฑฐ์ ํ๊ฒฝ์ด ์๋๋ฉด ๋ค ์ธ ์ ์๋ค.
TPL
C#์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋ํ ๋ฐํ์์ Task Parallel Library(TPL)๋ผ๋ ๋
์์ด ์ฒ๋ฆฌํด์ค๋ค.
๊ธฐ๋ณธ์ ์ธ ์๋ฆฌ๋ ๊ทธ๋ฆฌ ํน๋ณํ๊ฑด ์๋ค. ๋ด๋ถ์ ์ผ๋ก ์ค๋ ๋ํ์ ๋๊ณ , ๊ฑฐ๊ธฐ์๋ค๊ฐ ํ์คํฌ๋ฅผ ์ฌ๋ ค์ ์คํ์์ผ์ฃผ๋ ๊ฒ์ด๋ค.
Task๋ฅผ ์คํํ๊ฑฐ๋ async/await์ ํ๋ ๋ถ๋ถ๋ค์ ์ ๋ถ TPL์ ์ฌ๋ผ๊ฐ๊ณ , TPL์ ์ํด ์ ์ด๋๋ค.
๊ฐ๋จํ ๋ก์ง์ TPL์ ํตํด ์ ์ดํ๊ณ ์ถ๋ค๋ฉด, ์ด๋ฐ์์ผ๋ก ํ์คํฌ๋ฅผ ์คํ์ํฌ ์ ์๋ค.
Run์ ํ์คํฌ๋ก ์คํ์ํฌ ๋ก์ง์ ํจ์๋ก ๋๊ฒจ์ฃผ๋ฉด ๋๋ ๊ฒ์ด๋ค.
๊ทผ๋ฐ ๋ญ ์ด๊ฒ ๋์ด๋ผ๋ฉด ์ด๊ฑธ ์ธ ์ด์ ๊ฐ ์๋ค.
Task ์์คํ ์ ๊ฐ์ ์ async/await์ ์ด์ฉํ ์์ฐจ์ ์ธ ๋น๋๊ธฐ ํธ๋ค๋ง์์ ๋์จ๋ค.
Javascript์ Promise&async/await์ด๋ python์ asyncio/async ๋ฑ์ ์ฌ์ฉํด๋ดค๋ค๋ฉด ๊ทธ ํธ๋ฆฌํจ์ ์ด๋ฏธ ์ ์ ๊ฒ์ด๋ค.
async/await
C#์์ async/await์ ์ ํ์ฌํญ์ ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค.
-
await ๋ฌธ์ async ํจ์ ๋ด์์๋ง ์ฌ์ฉํ ์ ์๋ค.
-
await๋ ํด๋น Task๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
-
async๋ ํด๋น ํจ์๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์ํ๋ ์ ์์์ ๋ปํ๋ฉฐ, ๋ณดํต์ Task๋ฅผ ๋ฐํํ๋ค.
-
Main ํจ์๋ async Task์ ์๊ทธ๋์ฒ๋ฅผ ๊ฐ์ง ์ ์๋ค. (since C# 7.1)
๋ง์ฝ Javascript์์ ์ฌ์ฉํ๋ ํ์ด๋จธ ์คํ ํจ์์ธ "setTimeout"์ C#์ผ๋ก ๊ตฌํํ๋ฉด ์๋์ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค.
๋๋ ์ด๋ก ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๋๊ธฐํ๋ค๊ฐ, ์ ๋ฌ๋ฐ์ ์ฝ๋ฐฑ์ ์คํํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
1์ด ํ์ด๋จธ์ 2์ด ํ์ด๋จธ๋ฅผ ๋ฑ๋กํด๋ดค๋ค.

์ ๋์๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ค๋ง ์ฌ๊ธฐ์๋ ํ์ด๋จธ ์ฝ๋ฐฑ์ด ์คํ๋๊ธฐ ์ ์ ๊บผ์ง์ง ๋ง๋ผ๊ณ ๋ฌดํ๋ฃจํ๋ฅผ ๋ฐ์๋จ๋๋ฐ, await๊ณผ WhenAll ๋ฑ์ ๊ทธ๋ฃจํ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ข๋ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
Javascript์ Promise.all๊ณผ ๋์น๋ค.

์ ๋๋ค.
Task์ Task
์์์ ์ผ๋ Task๋ void ๋ฆฌํด ๋ฒ์ ์ด๊ณ , ๋ญ๊ฐ ๊ฐ์ ๋ฐ์์ ์ธ ํ์๊ฐ ์๋ค๋ฉด Task
์๋๋ int ๋ง์ ํจ์๋ฅผ async ๋ฒ์ ์ผ๋ก ๊ตฌํํ ์ฝ๋๋ค.
๋ณ๋ค๋ฅผ๊ฑด ์๋ค.
์ฐธ์กฐ
TPL(์์
๋ณ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ) | Microsoft Learn
.NET์ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ: ์ค๋ช
์ ๊ฐ์ด๋ | Microsoft Learn
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ - C# | Microsoft Learn