1. ์ ๋ํฐ GC๋ ์ผ๋ฐ์ ์ธ CLR GC๋ ๋ค๋ฅธ ๊ฐ๋
์ธ๊ฐ์?? ๊ฐ๋น์ง ์คํ์ดํฌ ์ด๋ฐ๊ฑด ์ฒ์ ๋ค์ด๋ณด๋ ์์ํ ๊ฐ๋
์ด๋ผ์ ์กฐ๊ธ ์ฐพ์๋ณด๋ ์ ๋ํฐ GC๊ฐ ๊ตฌ๋ฒ์ ์ด์ฌ์ ์ฑ๋ฅ์ด ๊ตฌ๋ฆฌ๋ค๋ ์๋ฆฌ๊ฐ ์๋๋ผ๊ณ ์ ๊ด๋ จํด์ ์ฝ๋ฉํ ๋ ์กฐ์ฌํด์ผํ ๊ฒ ์์๊น์?
2. ๊ทธ๋ฆฌ๊ณ ์ฝ๋ฃจํด ์ด๊ฑฐ๋ await async ๋์ ์ฐ๋ ๊ฐ๋
์ธ๊ฑฐ๊ฐ์๋ฐ ์ข ์ฐพ์๋ณด๋ UniTask ์ด๊ฒ ์๋๋ฐ ์ฝ๋ฃจํด ๋์ UniTask ์จ๋ ๋ฌธ์ ์๊ฒ ์ฃ ??
[๐ฃ์ง๋ฌธ] C# ์ ๋ํฐ ๊ฒ์๊ฐ๋ฐ ์ ํด๋ณด๋ ค๊ณ ํ๋๋ฐ ์ง๋ฌธ์์ด์
์ต๋ช
(222.120)
2023-03-08 15:45
์ถ์ฒ 1
๋๊ธ 12
๋ค๋ฅธ ๊ฒ์๊ธ
-
์ด๊ฑฐ ๊ธ์จ์ฒด ๋ญ์ง ์์๋๋ถ [6][๐ฃ์ง๋ฌธ] ์ต๋ช (104.28) | 23.03.08์ถ์ฒ 1
-
์ ๋ํฐ ๊น๋ ๊ธ์ ๋ง์ด ๋ณด์ด๋๋ฐ ์ธ๋ฆฌ์ผ์ ์ ์ ๋ณด์? [9][๐ฌ] ์ต๋ช (kishin4510471) | 23.03.08์ถ์ฒ 0
-
๊ฐ์์บ๋ฆญํฐ์ ๊ฒฝ์ฐ ์กฐ์์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๋ถ๋ฆฌํจ?? [7][๐ฌ] ์๋์๋(seoul90) | 23.03.08์ถ์ฒ 0
-
AssetBundle ์ด๊ฑฐ ๋ค์ด๋ฐ๊ณ ๋ํ ์ ์ฅ ์ง๋ฌธ [5][๐ฃ์ง๋ฌธ] ์ต๋ช (59.0) | 23.03.08์ถ์ฒ 1
-
ํ์ฌ๋๋ ค์น๊ณ ๋ด ๊ฐ๋ฐ์ผ๋ง ํ์ผ๋ฉด ๋๋ฌด ์ข๊ฒ ๋ค. [28][๐ฌ] ๋ฆฌ์ผ๋ก๊ฐ๋ฐ(mlwpa3mbv7lv) | 23.03.08์ถ์ฒ 1
-
์ ๋ํฐ ์ธ์คํํฐ ์์์ DateTime์ ์์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋์? [5][๐ฃ์ง๋ฌธ] ์ต๋ช (121.166) | 23.03.08์ถ์ฒ 0
-
๊ฐ๊ฐํ๋๊น ๋๋ฌด ํ๋ค๋ค[๐ฌ] ์ต๋ช (58.237) | 23.03.08์ถ์ฒ 0
-
ํน์ ์๋๋ฆฌ์คGG ์จ๋ณด์ ๋ถ ์์ผ์ ?[๐ฌ] ์ต๋ช (175.201) | 23.03.08์ถ์ฒ 0
-
ํ์ฝ์ง ๊ณต๋ชจ ๋ณดํต ์ธ์ ์ฐ๋ฝ์ค์ง [7][๐ฌ] dryrain(dryrain1025) | 23.03.08์ถ์ฒ 0
-
์ ๋ํฐ๋ ์ ์ ๋ณ์[๐ฌ] ์ต๋ช (lee080810) | 23.03.08์ถ์ฒ 3
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
UniTask async await๋ ๋จ์ผ ์ค๋ ๋์์ ์งํ๋๋๊ฑฐ ์๋์์?? ์ ๋ํฐ์์ ๋ฉํฐ ์ค๋ ๋๋ ์ง์ ์๋๋๊ฑฐ ์๋๊ฐ์?
์ผ๋ง๋ ์๋ ์๋ฃ๋ฅผ ๋ณด๊ณ ์๋๊ฑฐ์?
ใดใด ๋ฉํฐ ์ค๋๋์์ ๋ ์ฝ๋ฃจํด์ ํ๋ ์ ์ชผ๊ฐ ์ฐ๋๊ฑฐ๊ณ ์๋ง๋? ๋ฉํฐ์ค๋๋ฉ์ ์์ ์ ๋ฐฐ์ฐ๊ธฐ๋ง ํ๊ณ ๊ฑฐ์ ์ฐ์ง ์์์ ํ์คํ์ง๋ ์์ ๊ทธ๋ฆฌ๊ณ ์ ๋ํฐ์์ async ์ด๊ฑฐ ๋์ ์ฐ๋ผ๊ณ ๋ง๋ ๊ฒ ์ก ์์คํ ์ผ๊ฑฐ์ - dc App
์๋ ๊ธฐ๋ณธ C#์ Task์คํ์ ๋ณ๋์ค๋ ๋์ Schedule๋ ๊ณณ์์ ์คํ๋๋๋ฐ, UniTask์ async await๋ ๋จ์ผ์ค๋ ๋์์ ๋์๊ฐ. ์ ๋ํฐ ์คํ๋ SynchronizationContext๋ฅผ ๋ฉ์ธ์ค๋ ๋์ ๋ถ์ฌํด๋จ์.
https://docs.unity3d.com/kr/2020.3/Manual/overview-of-dot-net-in-unity.html
๋๋ฌธ์
์ ๋ํฐ์์ async๋ ๋ฉ์ธ์ค๋ ๋๊ฐ ๋ง์
๋ง์ฃ ? ๊ทธ๋ผ ์ฝ๋ฃจํด ๋์ UniTask ์ฐ๋ฉด ๋๋๊ฑฐ ์๋๊ฐ์?? ์ ๋ํฐ์์ UniTask๋ฅผ ์ฝ๋ฃจํด๋์ ์ฌ์ฉํ๋ ์์ํธํ ๊ฐ๋ ์ผ๋ก ์ดํดํ๋๋ฐ
async Task๊ฐ ์ฝ๋ฃจํด๋ณด๋ค ํธํ ๋๋ ์๋๋ฐ ์ฃผ์์ ์ด ์์. ์ฝ๋ฃจํด์ ํด๋น MonoBehaviour๊ฐ Destroy๋๋ฉด ์๋์ผ๋ก ์คํ์ข ๋ฃ๋์ง๋ง async Task๋ ์ข ๋ฃ๋์ง ์์. ๊ทธ๋์ CancellationToken์ ์จ์ผํ ๊ฑฐ์. ์ฝ๋ฃจํด์ฒ๋ผ ํน์ GameObject๊ฐ Destroy๋ฌ์๋ ๊ฐ์ด ์ทจ์๋๊ฒ ํ๊ณ ์ถ์ผ๋ฉด GetCancellationTokenOnDestroy๋ก ํ ํฐ๋ฐ์์ ์ ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋จ
๊ทผ๋ฐ ์์ํธํ์ด๋ผ๊ณ ๋งํ๊ธด ์ข ๊ทธ๋ ๊ณ ๊ทธ๋ฅ ๊ฐ๋จํ๊ฑด ์ฝ๋ฃจํด์ฐ๋ ํธ์ด๊ณ , MonoBehaviour์คํฌ๋ฆฝํธ๊ฐ ์๋ ๊ณณ์์ ๋น๋๊ธฐ์ฒ๋ฆฌํ๊ณ ์ถ์ผ๋ฉด UniTask์ฐ๊ณ ๊ทธ๋ฐ ์ ๋์. StackTrace๊ฐ์ ๊ฒฝ์ฐ ์ฝ๋ฃจํด๋ณด๋จ UniTask๊ฐ ์ข๋ ์์ธํ ๋์ค๋ ํธ์.(๊ธธ๊ฒ ๋์ค๋๊ฒ ์ข ํจ์ ์ด๊ธด ํ์ง๋ง ๋์ค๋๊ฒ ์ด๋์..)
์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ์๋ถ๋ค ์ฝ๋ฃจํด๋ ์ฐ๊ณ UniTask๋ ์ฐ๊ณ ๋ ๋ค ์์ด์ ์ฐ์๋์? ์ ๊ฐ ์ดํดํ๋ฐ๋ก๋ C# 7.0 ์ด์ ๊น์ง ๋ง์๊ฐ ์ฌ์ฉ์ ์ง์ AsyncStateMachine ๊ตฌํํ๋ผ๊ณ IAsyncStateMachine ์ธํฐํ์ด์ค ์ง์ํด์ฃผ๊ธฐ ์ ๊น์ง ์ ๋ํฐ ํ๋ ์์ํฌ ํน์ฑ์ async await ํค์๋๋ฅผ ์ธ์๊ฐ ์์ผ๋ yield ํค์๋๋ก ๋ฅ๊ผฌ์ผ ํด์๋๊ฑธ๋ก ๋ณด์ด๊ฑฐ๋ ์ ๋ค๋ฆ๊ฒ ๋ฐ์ด๋๋ ์ ์ฅ์์๋ ๊ตณ์ด ์ฝ๋ฃจํด์ ์ธํ์๊ฐ ์์๊ฑฐ๊ฐ์๋ณด์ฌ์์
๋ค๋ฅธ์ฌ๋์ด ์ด๋ป๊ฒ์ฐ๋์ง๋ ๋ ์ ๋ชจ๋ฅด์ง๋ง ๋๊ฐ์๊ฒฝ์ฐ CancellationToken ์ฒ๋ฆฌํ๊ธฐ ๊ท์ฐฎ์ผ๋ฉด ๊ทธ๋ฅ ์ฝ๋ฃจํด ์จ. (๋น์ฅ ํ ํฐ์ผ๋ก Task์ทจ์ ์ฒ๋ฆฌ๋ฃจํด ์์ฑํด๋ณด๋ฉด ๋ด ๋ง์ด ๋ฌด์จ๋ง์ธ์ง ์๊ฒ๋ ๊ฑฐ์) ์ฌ๋ฌ๊ฐ์ ๋น๋๊ธฐ ์์ a,b,c,d๊ฐ ์๊ณ ๊ทธ๊ฒ๋ค์ด ๋ค ๋๋ฌ์๋ ๋ญ๊ฐ ์ฒ๋ฆฌํ๊ธฐ์๋ UniTask.WhenAll๊ฐ์๊ฒ ํธํด์ ์ด๋ฐ๊ฑด ๋น๊ทผ Task์ฐ์ง. ๊ทผ๋ฐ ๋ด๊ฐ์์ฑํ๋ ์ฝ๋๊ฐ 3rdํํฐ ์ ํธ๋ฆฌํฐ ํด์ด๋ผ๊ณ ํ์๋(์๋ฅผ๋ค๋ฉด Excelํ์ฑํด) ์ด๋ฐ ํด์ UniTask๊ฐ ์๊น๋ฆฐ ๊ณณ์์๋ ๋์ํ๊ธธ ์ํ๋ค๋ฉด ์ด๋ฐ๊ฑฐ ๋ง๋ค๋ ๊ทธ๋ฅ Coroutine์ ์ฐ์ง. ํด๋น ํด ์ค์นํ๋๋ฐ UniTask์ค์น์๋์๋ค๊ณ ํ๋ฉด ๊ทธ๊ฑด๋ ์๋๊ฑฐ ๊ฐ์ผ๋๊น. ๊ทธ๋ฅ ๋ ์ผ๋ฐ์ผ์. ๋ฌด์ ๊ถ Task์ด๋ค ๊ทธ๋ฐ๊ฑฐ ์๋
await async์์ฒด๊ฐ ์ปดํ์ผ๋ฌ ๊ตฌํ ์ํ๋จธ์ ์ด๋ผ ์ฝ๋ฃจํด์ด๋์ ์ปดํ์ผ ์๋์ฐจ์ด๊ฐ ์ข ์์ง ์์๊น ํฉ๋๋ค. ์ฝ๋ฃจํด์ iterator์ด๊ณ ์ - dc App
Gc๋ ๋ชจ๋ ธ์์๋ง ๊ทธ๋ด๊ฒ๋๋ค ๊ทธ๋๋ ๋ผ์ด์ผ์ค ๋ฌธ์ ๊ฐ ์ปธ๊ณ ์ง๊ธ์ ๋ชจ๋ ธ ์ง์์ ์ํ๊ธฐ์ ์์ผ๋ก๋ ๊ทธ๋ด๊ฒ๋๋ค - dc App