Future
Future
๋ ํธ๋ ์์
๋๋ค.์ด ํธ๋ ์์ ์์ง ์๋ฃ๋์ง ์์์ ์๋ ์๋ ์์
์ ๋ํ๋
๋๋ค. Future๋ poll
ํจ์๋ฅผ ํตํด ํด๋ง๋ ์ ์์ผ๋ฉฐ, ์ด ํจ์๋ Poll
์ ๋ฐํํฉ๋๋ค.
#![allow(unused)] fn main() { use std::pin::Pin; use std::task::Context; pub trait Future { type Output; fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>; } pub enum Poll<T> { Ready(T), Pending, } }
๋น๋๊ธฐ ํจ์๋ impl Future
๋ฅผ ๋ฐํํฉ๋๋ค. ์๋ก์ด ํ์
์ ๋ง๋ค๊ณ ์ด ํ์
์ด Future
๋ฅผ ๊ตฌํํ๊ฒ ํ ์๋ ์์ง๋ง ์ผ๋ฐ์ ์ด์ง๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด tokio::spawn
๊ฐ ๋ฆฌํดํ๋ JoinHandle
์ Future
๋ฅผ ๊ตฌํํ๋ฉฐ, ์ด๋ฅผ ํตํด ์์ฑ๋ ์ค๋ ๋์ joinํ ์ ์์ต๋๋ค.
Future์ .await
๋ฅผ ํธ์ถํ๋ฉด, ํด๋น Future๊ฐ ์ค๋น๋ ๋๊น์ง ํ์ฌ ๋น๋๊ธฐ ํจ์๊ฐ ์ผ์ ์ค์ง๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ Future๊ฐ ์ค๋น๊ฐ ๋๋ฉด, ๊ทธ ๊ฐ์ด .await
๊ตฌ๋ฌธ์ ๊ฐ์ด ๋ฉ๋๋ค.
-
Future
์Poll
ํ์ ์ ์ค์ ์ ์๋ ์์ ๋ณด์ด๋ ๊ทธ๋๋ก ์ ๋๋ค. ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด Rust ๋ฌธ์์์ ํ ๋ฒ ๋ ํ์ธํ ์ ์์ต๋๋ค. -
๋ณธ ๊ฐ์์ ๋ชฉ์ ์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ ์๊ธฐ ๋๋ฌธ์, ์๋ก์ด ๋น๋๊ธฐ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ๋ง๋๋๋ฐ ํ์ํ
Pin
๊ณผContext
๋ ๋ค๋ฃจ์ง ์์ต๋๋ค. ์ด๋ค์ ๋ํด ๊ฐ๋จํ ์ค๋ช ํ์๋ฉด:-
Context
๋ฅผ ์ฌ์ฉํ๋ฉด Future๊ฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ๋ค์ ํด๋ง๋๋๋ก ์์ฝํ ์ ์์ต๋๋ค. -
โPinโ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ์์ Future์ ์์น๊ฐ ๊ณ ์ ๋๊ธฐ ๋๋ฌธ์ ํด๋น future์ ํฌ์ธํฐ๊ฐ ํญ์ ์ ํจํ๊ฒ ์ ์ง๋ฉ๋๋ค. ์ด๋
.await
ํ์ ์ฐธ์กฐ๋ฅผ ์ ํจํ ์ํ๋ก ์ ์งํ๊ธฐ ์ํด ํ์ํฉ๋๋ค.
-