์์ฑ ํ ๋ช ์ด ๋ค ์ฌ๋ผ์ง๋ ๋ชฌ์คํฐ์ ์ฐ์ด๋ ์ฝ๋์ผ
๊ฒ์ ์ค ๋ฉ์ธ ์ฌ์ผ๋ก ์ด๋ํ๋ฉด ์ด์ ์ฌ์์ Delay๋ถ๋ถ ์คํํ๋ย Unitask๊ฐย
gameObject.SetActive(false); ์คํํ๋ ค๋ค๊ฐ gameobject๊ฐ null์ด๋ผย ์คํ ๋ชปํ๋ค๊ณ ์ค๋ฅ๋ด๊ฑฐ๋
๋ฐ๋ณตํด์ ์คํํ ์ฝ๋๋ ์๋๋ผ if(this!=null)ํด๋ฒ๋ฆฌ๋ฉด ์ค๋ฅ ์๋ฑ๊ธธ๋ ์ด๋ ๊ฒ ์ฐ๋ ค๊ณ ํ๋๋ฐ
์ด๋ฌ๋ฉด ์ด๋ค ๋จ์ ์ด ์๋์ง ์๊ณ ์ถ์ด
์ cancellationtoken์ ๋ญ์ฉ๋์. ์ฌ์ ํ๋๋ฉด ํ ํฐ cancelํ๊ฒ ํด๋จ์ผ๋ฉด ์คํ๋ฉ์ถํ ๋ฐ
๋จ์ ์ผ๋ก๋ ์ธ๋ฐ์์ด ์ฌ์ ํ๋์ ๋๊ธฐํ ํ์๊ฐ ์๋๋ฐ ๋๊ธฐํ๋ ์ ๋์ผ๋ฏ + if๋ฌธ ์ธ๋ฐ์์ด ํ๋ฒ ์ถ๊ฐํด์ ๊ฐ๋ ์ฑ ๋ณ๋ก์ธ๊ฑฐ? ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ํ ํฐ์ด๋ destroy๋ ๋ ์๋์ผ๋ก ์บ์ฌ๋๋ ํ ํฐ ๋์ด ํฉ์ณ์ await์ ๋ฃ์ด์ฃผ๋ฉด ๋ ๊ฒ๊ฐ์์ผ์. var cts = CancellationTokenSource.CreateLinkedTokenSource(this.GetCancellationTokenOnDestroy(), token); await Unitask.Delay(~~,cts.token);
์น CreatedLinkedTokenSource๋ก๊ตฌ๋ง ๋ฉ๋ชจ๋ฉ๋ชจ
ํน์ this.GetCancellationTokenOnDestroy() ๋ง๊ณ ์ฌ ์ด๋ ์ ์คํ๋๋ Cancel ํ ํฐ์ด ์์๊น? ๊ฒฐ๊ณผ๋ ๊ฐ๊ฒ ์ง๋ง ํน์ ๋ฐ๋ก ์๋์ง ๊ถ๊ธํด์ ๊ฒ์ํ๋๋ฐ ๋ชป์ฐพ๊ฒ ์ด
์๋ ๊ฒ์ผ๋ก ์๊ณ ์์ด์ผ์. ๊ฒฐ๊ณผ๋ ๊ฐ์ง๋ง ์ฌ ์ด๋๊ด๋ จํด์ ํ ํฐ ํ๋๋ก ์ฌ์ฉํ๊ณ ์ถ์ผ์๋ค๋ฉด ์ฌ ๋งค๋์ ๊ฐ์ ๊ณณ์ ์ ์ญ ๋ณ์๋ก ์ ์ธํด์ฃผ๊ณ ์ฐธ์กฐํด์ ์ฌ์ฉํด์ฃผ์๋ฉด ๋ ๊ฒ ๊ฐ์์ผ์.
๋งค๋ฒ ๋์๋ฐ๋ค ๊ณ ๋ง์
ํ๋ ๋ ๊ถ๊ธํ๊ฒ CTS.Cancel() ํ๋ฒ ํด๋ฒ๋ฆฌ๋ฉด ๋ค์๋ถํฐ ๊ทธ CTS๊ฐ ๋ค์ด๊ฐ Unitask๋ ์คํ์ด ์๋๋๋ฐ ๋ ์ด๋ป๊ฒ ์จ? CTS๋ฅผ ๋งค๋ฒ ์คํํ ๋ =new CTS(); ํด์ค์ผ ์บ์ฌํ๋๊ฒ๋ ๋ค์ ์ธ ์ ์๋๊ฑด๊ฐ?
ํ๋ฒ cancel์ํจ ํ ํฐ์ ๊ทธ ์ดํ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฑฐ์ผ์. ๊ฒฝ์ฐ๋ง๋ค ๋ค๋ฅด๊ฒ ์ง๋ง ํ๋ฒ์ ํ๋๋ง ์คํ๋๋ ๊ฒฝ์ฐ์๋ ํญ์ cancel, disposeํด์ฃผ๊ณ new ํ ๋นํด์ฃผ๋๊ฑฐ์ผ์.
๊ฐ์ฌํฉ๋๋ค
try catch๋ก await ๋ฅผ ํฌํจํด์ if ๊ตฌ๋ฌธ ์์ ๋ก์ง์ ๊ฐ์ธ๋ฉด TaskCanceledException์ ํธ๋ค๋ง ํด์ ์ค๊ฐ์ ์์ธ์น ์ ์๋
์ด๊ฒ๋ ๋ง๋๋ฏ. ใณใณ