ย IEnumerator ํจ์A
var task =ย ํจ์B;
yield return task;
...
async Task<GameObject> ํจ์B
GameObject goObject = await Addressables.LoadAssetAsync<GameObject>("").Task;
...
์ด๋ฐ ๊ตฌ์กฐ๋ก ๋์ด์๋๋ฐ ์ ์ฝ๋๋ฅผ ํ๋ ์ฑ์ด ๋ค์ ธ๋ฒ๋ฆฌ๋๊ฑฐ์
๋ก๊ทธ๋ฅผ ์ฐ์ด๋ณด๋๋ฐ ํจ์B ๋ก๊ทธ ์ฐํ๊ธฐ๋ ์ ์ ๋ฉ์ถฐ๋ฒ๋ ค์ ํด๋งค๋ค๊ฐ
ํจ์A ๊ตฌ์กฐ๋ฅผ
ย IEnumerator ํจ์A
var task =ย ํจ์B;
yield return new WaitUntil(() => task.IsCompleted);
...
์ด๋ ๊ฒ ๋ฐ๊พธ๋๊น ์ ์์ ์ผ๋ก ๋์์ ํ๋๋ผ๊ณ
var task = System.Threading.Tasks.Task.Run(() => CsEffectPoolManager.Instance.GetEffect(csDropObjectQueueNode.StartPosition, EnInGameEffect.DropItem, 0, true, null, m_sprite));
์ด๋ ๊ฒ ํด๋ ๋์์ ํ๋๋ฐ ์ํผ
์ฒ์ ์ํ์์ ์ ๊ต์ฐฉ์ํ๊ฐ ์๊ฒจ์ ์ฑ์ด ์ฃฝ์๊ณ
2๋ฒ์งธ ๋ฐ๊พผ ํจ์์์๋ ์ ์ ์๋์ํ๋์ง ์ค๋ช ํด์ค์ ์๋ ์ฌ๋์์ด?
์ฒ์ ํจ์A ๋ง์ง๋ง์ task.Result;๋ ์๋ค
์์๋ค์
unitask ๋ผ๋ ์ข์ ํ๋ฌ๊ทธ์ธ ์์ผ๋ async ์ฐ๋ ค๋ฉด ์จ๋ณด์
uniRXํ๊ณ unitask ios์๋ ์ค๋ฅ ๋๋ ์คํ์ด ์๋ ์ ์๋ค๊ณ ํ๋๋ฐ ๊ฐ์ ๋๊ฑด๊ฐ??
1. yield return task๋ก taskํํ ์ ์ด๊ถ์ ๋๊ธฐ๊ณ ๋ฉ์ธ์ฐ๋ ๋๋ฅผ ๋ธ๋กํ๋๋ฐ Addressables.LoadAssetAsync๋ ๋ฉ์ธ์ค๋ ๋๊ฐ ๋ธ๋ก๋์ด์์ผ๋ฉด ์์ํ ๋๋์ง ์์ผ๋ ๋ฐ๋๋ฝ 2. ์ฝ๋ฃจํด WaitUntil์ non-blocking์ด๋ผ ํ๋ฒ isCompleted์ฒดํฌํ๊ณ ์๋๋ฉด ํ๋ ์ ๋๊ธฐ๋๊น ์ด์๋จ์ 3. Task.Run์ ์ฐ๋ ๋ํ๋ก ์ฒ๋ฆฌ๋ฅผ ๋๊ธฐ๋๊น ์ด์๋จ์ (์ด๋๋ ์๋ธ์ ๋ฉ์ธ์ฐ๋ ๋ ์๋๋ฉด ๋ชป์ธ๊ฑธ?) ๊ฒฐ๋ก : ์ฝ๋ฃจํด์ธ๊ฑฐ๋ฉด ๊ฑ ๋ค์ ํ์คํฌ ๋นผ๊ณ yield return Addressables.LoadAssetAsync("") ํด ์ฝ๋ฃจํด์ด๋ ํ์คํฌ๋ ์งฌ๋ฝํ์ง๋ง๊ณ