์ฝ๋ฃจํด์ ๊ทธ๋ฅ stopcoroutine ํ์ ๋ค์ startcoroutineํ๋ฉด ๋๋๋ฐ ์ ๋ํ์คํฌ๋ ํ๋ฒ cancel ํ๋ฉด ์๋ง ์ฌํธ์ถ ํด๋ด์ผ await ์ดํ๊ฐ ์คํ์ด ์๋๋ค
์คํ ์ ์ dispose ํ๊ณ ์์ฑ์๋ก ์๋ก ํ ๋นํด์ค๋ ์ ๋๊ณ
๋น์ฐํ ํ ํฐ์ ๋๋์์ด ๋ง๋ค์ด์ ๊ทธ๋๊ทธ๋ ์๋ก ๋ฃ์ด์ฃผ๋ ๊ฑด ์๋ ํ
๋ฐ
๋ด๊ฐ ๋ญ ๋นผ๋จน๊ณ ์๋์ง ๋ชจ๋ฃจ๊ฒ์ด..
tokensource ๋ง๊ณ token๋ง ์ป๋?
ใดใด ์์ค๋ก ์ ๋๋ก ํ์
์บ์ฌํ ํฐ์์ค๋ 1ํ์ฉ์ด๊ณ ๋ ๋ง๋ค ํ ํฐ ์๋ก ๋ฐํ ํ๋ ๊ฑฐ ๋ง์
์ ์ญ์ผ๋ก ์ ์ธํ๊ณ ํ๋ฒ disposeํ ํ ํฐ์ ๋ค์ new()๋ก ๋ฐํํ๋ ๊ฑด ์ ๋๋ ๊ฒ ๋ง๋ ๊ทธ๋ฌ๋ฉด?
ํ ํฐ์ ๋ฐ๋ก ์ฐ๋ ๊ฑฐ ์๋๊ณ ์์ค์์ ํ ํฐ ๋ฐํํด์ผ ๋จ ๋ฐํ์ด๋ผ ํด๋ดค์ ํ ํฐ์ด ๊ตฌ์กฐ์ฒด๋ผ ์์ค ์ฐธ์กฐ ํ๋ ๊ฐ ๋ณต์ฌ๊ฐ ๋ ์์ค์์ ์บ์ฌ ํ๋ฉด ๊ทธ ์์ค์์ ๋ฐํํ ํ ํฐ ๋ค ์ทจ์ ๋จ ์์ค๋ ํ ๋ฒ ์บ์ฌํ๋ฉด ๋ค์ ๋ชป ์ฐ๋ ๊ฑฐ๋ผ ์๋ก ๋ง๋ค์ด์ผ ๋๊ณ ์๋ก ์์ฑํ ์์ค์์ ํ ํฐ ์ฌ๋ฐํ ์ ํ๋ฉด ์ด์ ์์ค์์ ๋ฐํํ๋ ํ ํฐ ๊ทธ๋๋ก ๋จ์์์ด์ ์ทจ์ ํ๋ ํ ํฐ์ด๋ฉด ์ทจ์ ๋๊ฒ
๊ท์ฐฎ๊ฒ ํด์ ๋ฏธ์ํด ๊ทธ๋ผ ์์ค๋ ํ ๋ฒ๋ง ์ ์ธํ๊ณ ํ ํฐ์ ๊ณ์ํด์ ๊ฐ์ ์์ค์์ ์๋ก ๋ฐํํ ์ ์๋ ๊ฑฐ์ผ? ์ทจ์ํ ๋๋ ์์ค๊ฐ ์๋๋ผ ๊ทธ ํ ํฐ์ ์ทจ์ํ๊ณ ์๋ก ํ ํฐ์ ๋ฐํํด์ผ ์ฌ์คํ์ผ๋ก ๋ค์ ๋๋ฆด ์ ์๋ ๊ฑฐ๊ณ ?
๋๊ธ ๊ธ์์ ๋งํ์ ์ข ์ฐ๋๊น ๋งํ๋ค... ์์ค์์ ํ ํฐ ์ฌ๋ฌ๊ฐ ๋ฐํ ํ ์ ์๊ณ ๊ฐ ๋ณต์ฌ ํ๋ฉด์ ์์ค๊ฐ ๊ทธ ํ ํฐ์ ์ฐธ์กฐํ๊ณ ์์ ์ทจ์๋ ์์ค์์ ํ๋ ๊ฑฐ ๋ง๊ณ ์บ์ฌ ํ๋ฉด ์ฐธ์กฐํ๊ณ ์๋ ํ ํฐ์๋ค๊ฐ ์ ํํด์ ์บ์ฌ ํ๋ ๊ฑฐ ์์ค๋ ์ฐ๊ณ ๋ฒ๋ฆฌ๋ ๊ฑฐ๋๊น ์์ค ์๋ก new ํ๊ณ ์ ์์ค์์ ํ ํฐ๋ ์๋ก ๋ฐํ ํด์ผ ๋จ
์ ์ญ์ผ๋ก ์ ์ธํด์ ์จ๋ ๋จ. ์์ค๋ฅผ ์ทจ์ํ๋ ํ ํฐ์ ์ทจ์ํ๋ ๋์ผํ ๊ฒฐ๊ณผ๊ณ . cancel ์ํจ ์ดํ์๋ ์ฌ์ฉ ๋ชปํ๋ ์๋ก ์คํ์ํค๊ธฐ ์ ์๋ dispose ํ new๋ก ์ ํ ํฐ ๋ฐํํด์ฃผ๋ฉด ๋จ. iscancellationrequested๊ฐ์ ์์ฑ๋ ์์ผ๋ ์ฐธ๊ณ .
CancellationTokenSource cts=new() void A() { cts.Cancel; cts.Dispose(); B().Forget() } async UniTaskVoid B() { cts=new(); await UniTask.Delay(1000, cancellationToken:cts.Token; } ์ด๋ฐํํ๋ก์ผ์๋๋ฐ ๋ณธ๋ฌธ์์ ๋งํ ๊ฒ์ฒ๋ผ ์ ๋๋ก ์๋์ด ์ ๋๋๋ผ๊ณ ..ํน์ ์ด๋๊ฐ ์๋ชป๋ ๊ฑด์ง ์๋ ค์ค ์ ์์๊น..?
A ํจ์๋ง ๋ฐ๋ณต์คํ์ํจ๊ฑฐ๋ฉด ๋ณ ๋ฌธ์ ์์ด๋ณด์ด๋๋ฐ ๋ค๋ฅธ ๋ถ๋ถ์ด ๋ฌธ์ ์๋๊ฑฐ ์๋๊น
ํ ํฐ์ ์๊ด ์๋ ๊ฒ ๊ฐ์๋ฐ ์ทจ์ํด๋ ๊ณ์ ์งํ ํ๊ณ ์ถ์ ๊ฑฐ๋ฉด ๋๋ ์ด์๋ค SuppressCancellationThrow ํด๋ด
์ await ์ดํ๊ฐ ์คํ์๋๋ค๋๊ฒ ๊ทธ๋ฐ์๋ฏธ์๋๊ฑด๊ฐ? ๊ทธ๋ผ ์๋๋ง๋๋ก ํด์ฃผ๋ฉด ํด๊ฒฐ๋๊ธด ํจ. ๊ทผ๋ฐ ๊ตฌ์กฐ๋ฅผ ๋ฐ๊พธ๋๊ฒ ๋์ ๋ฏ.