ย ๊ทธ๋์ ํ ํฐ์ ๋ญ๊ฐ ์ด๋ ค์๋ณด์ฌ์ ์ฌ์ฉํ์ง ์๊ณ ์๋ ๊ฒ์ด์ผ์ค.
์ง์ ํด๋ณด๋ฉด ์ ์๋์ง ์์๊น ์ถ์ด์ ๊ทธ๋ฅ ๋์ผ๋ก๋ง ๋ณด๋ค
์ด์ ์ ๋ง ํ ์คํธํด๋ณด์์ผ ํ ๋๋ค ์ถ์ด ํ ์คํธ !
ย ๊ธฐ์กด ์ฝ๋ฃจํด๊ณผ ๊ฐ์ด ์ค๋ธ์ ํธ๊ฐ ๋นํ์ฑํ ๋ ๋ ์๋์ผ๋ก ์ข ๋ฃ๋ ์๋ ์๊ณ ,
์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ๋ผ ์ค๊ฐ์ ์ข ๋ฃ์ํฌ ์ ์๋ ๊ฒ์ด ๊ฐ๋ฅํ ๊ฑธ๊น ํ๊ณ ํ ์คํธ ํด๋ณด์๋๋ฐ
์ ๋ง ์ ๋๋ ๊ฒ์ด์ผ์ค.
private CancellationTokenSource disableCancellation;private CancellationTokenSource AAACancellation;
private void OnEnable()
{
if (disableCancellation != null)
{
disableCancellation.Dispose();
}
disableCancellation = new CancellationTokenSource();
}
private void OnDisable()
{
disableCancellation.Cancel();
}
public void StartAAA()
{
AAA().Forget();
}
public void StopAAA()
{
AAACancellation.Cancel();
AAACancellation.Dispose();
}
public void StartBBB()
{
BBB().Forget();
}
public async UniTask AAA()
{
var i = 0;
AAACancellation = new CancellationTokenSource();
var link = CancellationTokenSource.CreateLinkedTokenSource(disableCancellation.Token, AAACancellation.Token);
while (i < 20)
{
Debug.Log("AAA : " + i++);
await UniTask.Delay(1000, cancellationToken: link.Token);
}
Debug.Log("AAA ์๋ฃ !");
}
public async UniTask BBB()
{
var i = 100;
while (i < 120)
{
Debug.Log("BBB : " + i++);
await UniTask.Delay(1000, cancellationToken: disableCancellation.Token);
}
Debug.Log("BBB ์๋ฃ !");
}
ย DisableCancellationํ ํฐ์ ๊ณต์๋ฌธ์์ ์์ ๋ก ์์ผ๋ ํ์ธํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์์ค.
๊ทธ์ enable, disable ์ ์ทจ์์ํค๊ณ ํ๊ธฐ, ์ฌ์์ฑ ํด์ฃผ๋ฉด ๋๋ ๊ฒ์ด์ผ์ค.
ย ์ฌ๊ธฐ์ ํ ํฐ์ ํ๋๋ง ๋ฃ์ด์ค ์ ์๋ค๋ณด๋ ๊ณต์๋ฌธ์์ ํ ํฐ ๊ฒฐํฉ์ด ์๋ ๊ฒ์ด์ผ์ค.
AAACancellation์ ์์ ์ ์ทจ์์ํฌ ์ ์๋ ํ ํฐ๊ณผ disable ์ ํ ํฐ์ ๊ฒฐํฉํ๊ณ ์ด๋ฅผ ์ ๋ฌํด์ฃผ๋๋ฐ
์๋ ๊ฒ ํ๊ณ ์ทจ์์์ผ๋ณด๋ BBB๊ฐ ์งํ์ค์ด๋ผ๋ AAA๋ง ์ทจ์๋๊ณ
Disable ์์๋ ๋ ๋ค ์ค์ง๋๋ค์ค.
ย ์ฝ๋ฃจํด์ ๋นํด ์ค๋จ์ํค๋ ๊ฒ์ด ์ด์ง ๋ณต์กํ๊ธด ํ์ง๋ง
yield return ํ ๋ new์ํด์ฃผ๋ ค๊ณ Dictionary์ ์บ์ฑํ๊ฑฐ๋ ๋ฏธ๋ฆฌ ํ ๋นํด์ฃผ๊ธฐ,
์ฝ๋ฃจํด ์ ์ง์ํค๊ณ ์์ํ๊ณ ํ๋ฉดย ์ฝ๋ฃจํด ๋ณ์๋ฅผ ๋งค๋ฒ ์๋ก IEnumertor ๊ฐ๋ฆฌํค๊ณ ์คํ์์ผ์ฃผ๋ ๊ฒ์ด
๋ณ๋ก์๋์ง๋ผ ์ด๋ ๊ฒํ๋ฉด ํธํ ๊ฒ ๊ฐ์ ๊ธฐ๋๋๋ ๊ฒ์ด์ผ์ค.
return๊ฐ๋ ์ค ์ ์๋๋ฐ ์ด๊ฑด ์ธ์ง์์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง...ย
์ด์จ๊ฑฐ๋ ์ทจ์์ํค๋ ๊ฒฝ์ฐ ํ ํฐ์ ๋ฌด์กฐ๊ฑด ์ด์ฉํ๋ฏ๋ก ๋ผ์ด๋ ์ปจํธ๋กค b๋๋ฌ๊ฐ๋ฉฐ ์ฐพ์ ๋ ํธํ ๋ฏ !
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
https://github.com/Cysharp/UniTask
์ฝ๋ฃจํด์์
ํ๋ ์ผ์ ์ ๋ถ ํ ์ ์๋ ๊ฒ์ด์ผ์ค.
waitfor~~~๋ฑ
์คํฌ๋ฆฝํธ๊ฐ ์ญ์ ๋์ด๋ ๊ธฐ๋ฅํ๋ค๋๊ฑด ์๋ฏธ๊ฐ ์์ดํด๊ฐ์๊ฐ์ค.
์ ๋ํ ์คํฌ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ์ถ๊ฐํ๋ ์ฝ๋๋ ์ํฌํธ๋ฟ์ด์์ผ๋ ๋ฌธ์ ๋ ์์๋ฏํ๋ค์ค. ํ์ ์คํํธ ์ฝ๋ฃจํดํ๋๊ฑฐ ๊ทธ๋ฅ ํจ์ํธ์ถ๋ก ๋ณ๊ฒฝ๋๋ ๋๊น๋ํด์ค. - dc App
https://neuecc.medium.com/unitask-v2-zero-allocation-async-await-for-unity-with-asynchronous-linq-1aa9c96aa7dd
- dc App
async vs ์ฝ๋ฃจํด์ด ์๋ unitask vs ์ฝ๋ฃจํด์ ๋น๊ตํด์ผํ ๋ฏํด์ค. ๋ฌผ๋ก ์ ์ด์ฃผ์ ํ๋ ๋ง๋์ด์ผ๊ธฐ์ธ๋ฐ ๊ทธ ์ธ ๋ถ๋ถ์ async๋ฅผ ์ ๋ํฐ์์ ์ฌ์ฉํ๊ธฐ ์ข๊ฒ ํ์ฅํด์ฃผ๋๊ฒ์ธ์ง๋ผ ๋ง์ํ์ ํ์์ค์ผ์ผ ์ํฅ๋ ์ฝ๋ฃจํด๊ณผ ๊ฐ์ด ์ํ๋๋๋ก ์ค์ ๊ฐ๋ฅํ ๋ถ๋ถ์ด์ผ์ค. ๋ํธ์์ด๋๋ ์ฌ์ฉ๊ฐ๋ฅํ๊ณ ์. ์ฒ์์๋๋ฆฐ ๊นํ๋ธ ๋งํฌ ์์ํ๊ธฐ ๋ถ๋ถ ๋ณด์๋ฉด ์ข์๋ฏํด์ค. - dc App
์ ๋ ๋ด๋น๋ผ ์๋ชจ๋ฅด๋๋ฐ ์์ ์ ๊ทธ๋ฅ ์ฝ๋ฃจํด์ผ๋กํ๋๊ฒ ์ ๋ถ ์ฌ์ฉ๊ฐ๋ฅํ๊ณ ๊ฐ๋ ์ฑ์ด ๋ ์ข์์ ์ฌ์ฉํ๊ณ ์์ ๋ฟ์ด์ผ์ค. ์ฑ๋ฅ์ ์ ๊ฒฝ์ฐ์ง์๋๊ฒ์ ์๋๋ฐ ์ฝ๋ฃจํด ์์ํธํ์ด๋ผ๊ณ ๋ค์์ด์ค. ์ถ๊ฐ์ ์ผ๋ก ๋๊ณผ ๊ฐ์ ์ด์ ์ธ๋ฐ ์๋ก์ด๊ฒ์ ์ฌ์ฉํด๋ณด๋ฉฐ ๋ฐฐ์ฐ๋ ค๋ ๋ชฉ์ ๋ ํฐ ๊ฒ์ด์ผ์ค. ์ฌ๋๋ค์ด ์์ฐ๋๊ฑฐ๋ฉด ๋ชจ๋ฅด๋๋ฐ ๊ฐค ๊ณ ์๋๋ค์ ์ด๊ฑฐ์ด๋ค๋๊ฒ์ด์ผ์ค!!! - dc App
์ด๊ฒ ์ธ๋ถ ์ข ์์ฑ์ ๋๋ฆด๋งํผ ๊ฐ์น์๋๊ฑด๊ฐ? ์๋๊ฑฐ ๊ฐ์๋ฐ
๋ฌผ๋ก ์ด ๊ณผ์ ๋ง๋ณด๋ฉด ๊ทธ๋ฅ ์ฝ๋ฃจํด์ฐ๊ณ ๋ง
์ง์ง๋ง ์ ๋ํ ์คํฌ์ ์ฅ์ ์ ์ด๊ฒ์๋๋๊น์.
https://blog.shlife.dev/m/52
๊ฐ์ธ์ ์ผ๋ก
์ดํ ํ์ฅ์ฑ๊ณผ ๊ฐ๋ ์ฑ, ์ฆ์ ์ฝ๋ฃจํด ํธ์ถํ๋๊ฒฝ์ฐ๊ฐ ์์ด์ ์ฌ์ฉํด์ค. - dc App
์ด๋ฐ ๊ธ์๋ ๊ฐ์ถ๋ฅผ ๋ฐ์์ผํ๋ ๊ฒ์ด์์ค!!
๊ณ ๋ง๋ค ํ๋ณด๋ง ๋๋ถ์ ํ๋ ๋ฐฐ์๊ฐ๋ค