[Rust] async ํด๋กœ์ €

Rust 1.85 (Rust 2024)๋ถ€ํ„ฐ async clusure ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
๋‹จํŽธ์ ์œผ๋กœ ๋ณด๋ฉด ๊ทธ๋ƒฅ ํด๋กœ์ €์˜ async ๋ฒ„์ „ ์ˆ์ปท์ด ์ƒ๊ฒผ๋‹ค๊ณ  ํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ๋ถˆํŽธํ–ˆ๋˜ ๋งŽ์€ ์ ๋“ค์ด ํ•ด์†Œ๊ฐ€ ๋œ๋‹ค.

๊ณผ๊ฑฐ์— ์žˆ์—ˆ๋˜ ๋ฌธ์ œ๋“ค์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด, ๋ณ„๋„ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.
https://blog.naver.com/sssang97/223745667272




๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์€ ์ผ๋ฐ˜ ํด๋กœ์ €์™€ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.
async๋งŒ ๋ถ™์ด๋ฉด ๋˜๊ณ , ํ•จ์ˆ˜ ํ˜ธ์ถœํ•˜๋“ฏ์ด ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.
Future ๋ฐ˜ํ™˜์ด๋ผ await์„ ๊ฑธ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ๋งŒ ๋นผ๋ฉด ๋‹ค๋ฅผ๊ฒƒ์€ ์—†๋‹ค.




async ํด๋กœ์ €๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›๊ธฐ

์›๋ž˜๋ผ๋ฉด ์ด ๋ถ€๋ถ„์ด async Rust์—์„œ ๊ฝค ๊ณจ์น˜์•„ํ”ˆ ๋ถ€๋ถ„์ด์—ˆ๋Š”๋ฐ, async ํด๋กœ์ €์˜ ๋„์ž…์œผ๋กœ๋Š” ๋ณ„๋กœ ๋จธ๋ฆฌ ๊ตด๋ฆด ๊ฒƒ ์—†์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
์•„๋งˆ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑ์œผ๋กœ ๋ฐ›์„๋•Œ Fn ๊ฐ™์€ ํ•จ์ˆ˜์šฉ ํŠธ๋ ˆ์ž‡์„ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•  ๊ฒƒ์ด๋‹ค.

async ํด๋กœ์ €๋‚˜ ํ•จ์ˆ˜๋ฅผ ๋ฐ›๊ธธ ์›ํ•œ๋‹ค๋ฉด, Fn์— 1:1๋กœ ๋Œ€์‘๋˜๋Š” async์šฉ ํŠธ๋ ˆ์ž‡์ธ AsyncFn๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํƒ€์ž… ์ œ์•ฝ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌ๋ฉด "i32 ์ธ์ž๋ฅผ 2๊ฐœ ๋ฐ›๊ณ , Result์„ ๋ฐ˜ํ™˜ํ•˜๋Š” async ํ•จ์ˆ˜"๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํ•จ์ˆ˜์˜ ํƒ€์ž…์ด ๋œ๋‹ค.
๋ฐ˜ํ™˜ํƒ€์ž…์— Future๋ฅผ ๋ช…์‹œํ•  ํ•„์š”๋Š” ์—†๋‹ค.
AsyncFn ์™ธ์—๋„ FnOnce, FnMut์™€ ๋Œ€์‘๋˜๋Š” AsyncFnOnce, AsyncFnMut๊ฐ€ ๋”ฐ๋กœ ์กด์žฌํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ทธ๋ƒฅ async ํด๋กœ์ €๋ฅผ ๋„˜๊ฒจ์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ž˜ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.