์ ๋ํ์คํฌ ์ฒ์์์์ ์ฝ๋ฃจํด ๋์ ์จ๋ณด๊ณ ์๋๋ฐ
์ ๋ํ์คํฌ๋ ์ค๋ธ์ ํธ๊ฐ ํ๊ดด๋๋ ์ค๋ธ์ ํธ์ ํจ์๋ฅผ ์คํ์ค์ด๋ ์ค๋ ๋๋ ๊ณ์ ๋์๊ฐ๋๋ด? null๋ ํผ๋ฐ์ค ์ฐธ์กฐ ์๋ฌ๊ฐ ๊ณ์ ๋จ๋ค
ํ๊ดด๋๋ฉด ์๋์ผ๋ก ์คํ์ค์ด๋ ์ค๋ ๋ ์ค์งํ ์ ์์?
์ค๋ธ์ ํธ์ ์ข ์๋๊ฑฐ๋ฉด OnDestroy()์ ๋ฃ์ด๋ณด๋ ๊ฑด ์ด๋ฐ?
์คํํด์ผํ๋ ํจ์๋ฅผ ๊ฑฐ๊ธฐ๋ค ๋ฃ์ผ๋ผ๋๊ฑฐ์?
cancellation token์ ๋ํด ์์๋ณด์์. 23๋ฒ์ ๋ถํฐ์ธ๊ฐ๋ monobehavior์ ondestroycancellationtoken ๊ธฐ๋ณธ์ ์ผ๋ก ์๊ณ , ๊ทธ ์๋ซ๋ฒ์ ์ ํ์ํ ๋ ํ ํฐ ์์ฑํด์ฃผ๊ณ ondestroy์์ ์บ์ฌํด์ฃผ๋ฉด ๋จ.
๊ทผ๋ฐ ์ด๊ฑฐ ํ ํฐ์ ๋ชจ๋ ํจ์์ ๋ค๋ฃ์ด์ฃผ๊ณ ํ๋ ์๋ง๋ค ๋ ์ค์ง๋ก์ง๋ ๋ฃ์ด์ค์ผํ๋๋ฐ ๋๋ฌด๋ถํธํ๊ฑฐ์๋?
์ฝ๋ฃจํด stop์ํค๋๊ฑฐ ์๊ฐํ๋ฉด ๊ทธ๊ฒ ๊ทธ๊ฑฐ๊ฐ์๋ฐ ์๊ฐ๋ณด๋ค ์ฌ๊ธฐ์ ๊ธฐ ์ฐ๊ธฐ ํธํจ
์คํ์ฝ๋ฃจํด ํ์ค์ด๋ฉด ๋์ด์์ด
๊ทธ๋ผ ๋ณ์์ ienumerator ๋ด์์ค์ ์ฌ์ฉํด์ผํ๋ ๊ฒฐ๊ตญ ๋ณ์ํ๋ ๋ง๋ค์ด์ฃผ์์. ๊ทธ๋์ ๊ทธ๊ฒ ๊ทธ๊ฑฐ๊ฐ๋ค๊ณ ํ๊ฑฐ์. ํ ํฐ ์ฌ์ฉ์ด ํธํ ์ํฉ์ผ๋ก๋ ์ฌ๋ฌ ํจ์๋ค ํธ์ถํ๊ณ ์ ์ง์์ผ์ฃผ๋ ์ํฉ๊ฐ์๊ฑฐ์์ ์ฝ๋ฃจํด์ stopallcoroutine ์ธ์ ์๋ ์ํฉ์ ๋ณ๊ฐ์ ๋ณ์์ ํด๋น ์ฝ๋ฃจํด๋ค ๋ค ๋ด์์ค์ stop์์ผ์ค์ผํ์ง๋ง ํ ํฐ ์ฌ์ฉํ๋ฉด ๊ทธ๋ฅ ๊ทธ ํ ํฐ ๋ณ์ ํ๋๋ง ๊ฐ์ง๊ณ cancel์์ผ์ฃผ๋ฉด ์ ๋ถ ์ค๋จ์ํฌ์ ์์.
๋ฆฌ์คํธ์ ๋ด์ผ๋ฉด ๋์์ด ๋ชจ๋ ํจ์์ ๋๊ธด๋ค๋๊ฒ, async ํจ์ ๋ด๋ถ์์ ํธ์ถํ๋ ๋ชจ๋ asyncํจ์์ ํ ํฐ์ ํญํฌ์๋ง๋ฅ ๋ค๋๊ฒจ์ผ๋๋ค ์ด๋ง์ด์์ ๋ ์บ์ฌ ๋๋์ง ์ฒดํฌํ๊ณ ์ค์ง๋ก์ง๋ ๋ด๋ถ์ ์ง์ ์จ์ค์ผํ๊ตฌ
๋ฆฌ์คํธ์ ๋ฃ๋ ์์ฒด๊ฐ ํ ํฐ์ ํ์์๋ ๊ณผ์ ์ด๋ผ ๋งํ๊ฑฐ์์. ๋๋ ๋ฐ๋ก ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํด์ผ ํ ์ด์ ๊ฐ ์๋ ์ด์ ๊ทธ๋ฅ ํ์ํ async ํจ์๋ค ์ด์งํผ ๊ฐ์ด ๋์๊ฐ๋ค๋ณด๋ ํด๋์ค์ ํ ํฐ ๋ณ์ ์ ์ธํด์ ๋ฑํ ํญํฌ์๋ง๋ฅ ๋๊ฒจ์ฃผ์ง ์์์ ๋ถํธํ์ง๋ ์์์. cancel๋์๋์ง ์ฒดํฌ๋ ํด์คํ์ ์๋๊ฑธ๋ก ์. cancel ์ฌ๋ฌ๋ฒ ํธ์ถํด๋ dispose ํ ๊ฒ์ด ์๋ ์ด์ ๋ณ ๋ฌธ์ ์์ง ์๋?
While await delay update ์ด๋ฐ๊ณณ์ ์บ์ฌ์ฒดํฌํ๊ณ ์ค์ง์ํค๋ ๋ก์ง์์ผ๋ฉด ์ ์ง๊ฐ์๋์์ด. ์ฒด์ธํ๋ฉด ๋ฆฌ์คํธ์ ๋ด๋๊ฑฐ๋ ํ ํฐ ๋๊ธฐ๋๊ฑฐ๋ ๋๊ฐ์ ํ์ค์ธ๋ฐ. ๋ด๋ถํจ์ํธ์ถ๋ค์ ํ ํฐ ์๋๊ธฐ๋ฉด ์๋ฉ์ถ์์ด
While await task.delay(update)
์บ์ฌ์ฒดํฌ๋ผ๋๊ฒ token.iscancellationrequested ์ด๊ฑฐ๋งํ๋๊ฑฐ์? ๊ฑ await ํ ํฐ ์์ผ๋ฉด ํด๋น ํ ํฐ cancel์ํค๋ฉด ์ทจ์๋๋๊ฑฐ๋ผ ์บ์ฌ์ฒดํฌ์ํด๋ ๋ฉ์ถค. ์ ๋๊ธ์์ด๋๋ก ๊ทธ๋ฅ ๋ด๋ถํจ์๋ค๋ ํด๋์ค๋ ์ ์ญ์ด๋ ๋ ๋์๋ฒ์ ํ ํฐ๋ณ์ ์ ์ธํ๊ฑฐ ์ฌ์ฉํด์ฃผ๋ฉด ๋๊ฒจ์ฃผ์ง์์๋ ๋๋๊ฑฐ๊ณ . ์ผ๋จ ์๋ฌ๊ฐ... ๋๋ ์ฒ์์ ๋ถํธํ๊ฒ ๋๊ผ๋๋ฐ ์ฐ๋ค๋ณด๋ ์ต์ํด์ ธ์ ๊ทธ๋ฐ๊ฐ ๋ ๋ซ๋ค๊ณ ์๊ฐํจ. ๊ฐ๋ ์ฑ ๋ฉด์์๋ ๊ทธ๋ ๊ณ . var isSuccess = await asyncํจ์ ์ด๋ฐ ์์ผ๋ก ์ฝ๋ฃจํด์ ์์ฑ์ด ์๋๋๊น. addressable๊ฐ์๊ฑฐ ์ฌ์ฉํ ๋๋ ๊ทธ๋ฅ unitask๋ก await ๋ฐ๋ก ๊ฐ๋ค๋ฐ๊ณ ์ฌ์ฉํ ์๋ ์๊ณ .
unitask๊ฐ ํธํ๋ค๊ณ ์ฐ๊ธฐ๋๊ฑด ์๋๊ณ ๊ทธ๋ฅ ์๋ก ์ฅ๋จ์ ์ด ์๋ค๋ณด๋ ๊ทธ๊ฒ๊ทธ๊ฑฐ๊ฐ๋จ ์ด์ผ๊ธฐ์์ด. ๋ด๊ฐ ๋ด๋น๋ผ ์์ง ์ ๋ชฐ๋ผ์ ๋ถํธํจ์ ๋ชป๋๋ผ๋๊ฑฐ์ผ์๋ ์๊ณ .
์์ ์ await Task.Delay(token) ํด๋๊ณ ๋ฐ๋ก์๋์ค์์ token.iscancellationrequested ๋ก ์ฒดํฌํ๋ด์ breakํ๊ธธ๋ ๋ด๋ถ์ ์ผ๋ก ์์ธ์๋์ง๊ณ if๋ฌธ๋ง์ผ๋ก ์ฐจ๋ก์ฐจ๋ก ์ ์ง๋๋๊ฑด์ค ใ ใ ํ ์คํธํด๋ณด๋๊น ์์ธ๋์ ธ์ ์์ด์ ๋ฉ์ถ๊ฒ๋์ด์๋ค ์ด๊ฒ๋ง์ง... ๊ทธ๋๋ ๋ชจ๋ ๋ด๋ถํจ์ํธ์ถ์ token์๋๊ธฐ๋ฉด ์ ์ง๊ฐ ๋ฐ๋ก์๋๊ณ ThrowIfCancellationRequested ๋ง๋ ๋๊น์ง ์คํ๋ผ์ ๊ผญ๋๊ฒจ์ค์ผ๋๋๊ฑฐ๊ฐ์๋ฐ ํ ๊ทผ๋ฐ ๋จธ ์ฒจ์ ๋์ ํ ๋ คํ ๋ ์์ธ๋ก ๋ฉ์ถ๋์์ด ์๋์ค ์๊ณ ์์ด๋ฐ๊ตฌ๋ก๋ง๋ค์์๊น ํ๊ณ ์์ด๊ฑด๋ฐ ์ด์ ๋๋ฉด ๊ฑฐ์ ์์ํธํ์ด๋ผ ์ ์ฉํด์ผ๊ฒ๋ด ใฑ ใ ์
๋๋์ ๋ฒ์ ํ ํฐ์ด ์ด์ฐจํผ ์ต์ async์์ ๋ง ์์ธ๋์ง๋ฉด ๋ฐ๋ก๋ ์๋ฉ์ถ๋๋ผ๋ ์ธ์ ๊ฐ ๋ฉ์ถ๋ค๋ ๋ป์ธ๊ฐ addressable๊ฐ์ ๊ฒฝ์ฐ์ loadaasetasync.waitforcompoletion ํ๋ฉด await ์์ด ๋๊ธฐ์ ์ผ๋ฃจ ์ฌ์์์ ์ด๊ฒ ๊ฒ์ํด๋ ์๋ฌด๋ฆฌ์๋์์ ์ฒจ์ ์ฝ์ง์ ๋ง์ดํ๋๋ฐ ์๊ณ ์์ผ๋ฉด ์ข์๋ฏ ctor์ async await๊ตฌ๋ฌธ์ ๋ชป์ฐ๋๊น ๋ ctor์์ ๋ก๋ํ ๋ธ ์ฐ๋์ค
๋ ๋๋ฒ ๋ฌ์๋๋ฐ ๊ธ์์๋๋ฌธ์ธ๊ฐ ์๋ฌ๋ฆฌ๊ณ ๋ ์๊ฐ๋ฒ๋ ค์ ๊ฐ๋จํ๊ฒ ์ ์ด๋ด.
์์ ๋ณธ ๊ฑด ์๋ง task ์์ ๊ฐ ์๋๊น ์ถ์๋ฐ ์ ๋ํฐ ๋ง๊ณ c#์์๋ while๋ฌธ ๋๋ฆฌ๋ฉด์ ์ ๋ํฐ๋ง๋ฅ await unitask.yield(token) ์ด๋ฐ๊ฑฐ ์ํด์ฃผ๋ค๋ณด๋ while๋ฌธ ๋ด๋ถ์ token๊ฐ์ง await๋ฌธ ์์ผ๋ฉด cancel๋์๋์ง ์ฒดํฌํด์ฃผ๊ธฐ ์ํด ๊ทธ๋ฐ์์ผ๋ก ์ฌ์ฉํ ๊ฒ ๊ฐ์. ์ ๋ํฐ์์๋ ๋ฌดํ๋ฃจํ๋๋ฉด ๋ป์ผ๋๊น ์บ์ฌ์ฒดํฌ๋ง์ผ๋ก ์ฌ์ฉ๋ชปํ๊ณ await์ผ๋ก ๋๊ธฐํด์ค๊ฑฐ๊ณ ์ด๊ฒ๋ง์์ด๋ ์ ๋๋๋ฐ ์บ์ฌ์ฒดํฌ๋ ์์๋๊ฑฐ๋ฉด ๊ทธ๋ฅ ๊ดํ์ ์ผ๋ก ์ฐ๋๊ฑฐ ์๋๊น ์ถ์. ์ด์งํผ unitask๋ ๋ฉ์ธ์ฐ๋ ๋์์ ๋์๊ฐ๋๊น.
๋ด๋ถํจ์ ํธ์ถ ์ด์ผ๊ธฐ๋ ๋ญ ๋ฐ๋ก ์์ธ์ฒ๋ฆฌ ํด์ฃผ๋๊ฑฐ์? ์์ธ์ฒ๋ฆฌ ํด์คฌ์ผ๋ฉด ๋ฐ๋ก cancel์๋๋๊ฑฐ ๋ง์๊ฑฐ์. ๋๋ ์ฝ๋ฃจํด์ผ๋ก ํ ์ ์๋ ๊ฑฐ unitask์์ ์ ๋ถ ๋๊ณ , ๊ทธ ์ด์์ ์์ ๋ ๊ฐ๋ฅํ๋ ์์ํธํ์ด๋ผ๊ณ ์๊ฐํจ. ๋ค๋ง ์ฌ์ฉํ๊ธฐ์๋ ์ฝ๋ฃจํด๋ณด๋ค ํธํ ๋ถ๋ถ๋ ๋ถํธํ ๋ถ๋ถ๋ ์๋ ๊ฒ ๋ฟ์ด์ง. ์์ฑ์์์ async ๊ตฌ๋ฌธ ์ฌ์ฉ ๋ชปํ๋๊ฑด ๋๊ฐ์ ๊ฒฝ์ฐ์๋ addressable์ด๋ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋ฐ๋ก static ํจ์๋ก async createinstance ํจ์ ๋ง๋ค์ด์ ํ๋ผ๋ฏธํฐ๋ก ์ด๊ธฐํ ํด์ฃผ๋ฉด์ ๋ง๋ค์ด์ค.
๊ฑ ํฐ์คํ ๋ฆฌ๋ ์ ๋ํฐ์ปค๋ฎค๋ํฐ ์์ ๋๊ฐ์ฌ๋ฆฐ ์ ๋ํ ์คํฌ ์์ ์ ๊ฑ ์์ ์์ฒด๊ฐ ์๋ชป๋๊ฑฐ์ธ๋ฏ ์ ์ด์ await ํจ์์ ์ธ์๋ก token์๋๊ธฐ๋ฉด ์๋ฉ์ถ๋๋ฐ await delay() <-- ์ด๋ ๊ฒ ์๋๊ธฐ๋ฉด ์๋ฉ์ถค ๋๊ฒจ์ผ delay ๋ด๋ถ์์ cancel์ฒดํฌํ๊ณ ์์ธ๋์ ธ์ ๋ฉ์ถ๋๊ฑฐ๊ณ ใ ใ ๊ทธ๋ ๊ฒ๋๋ฉด ์์ฑ๋ง์ผ๋ก awaitํ๊ฒ๋๋๊น ๊ฑฐ์ ๋ชจ๋ ํจ์๊ฐ asyn๋ก ๋๋ฐฐ๋์ ์ซ์์์
ใ ใ ์ฌ๋ณ๊ฒฝ๋๋ ๋์๊ฐ