ย ๊ทธ๋™์•ˆ ํ† ํฐ์€ ๋ญ”๊ฐ€ ์–ด๋ ค์›Œ๋ณด์—ฌ์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์žˆ๋˜ ๊ฒƒ์ด์•ผ์˜ค.

์ง์ ‘ ํ•ด๋ณด๋ฉด ์ž˜ ์•ˆ๋˜์ง€ ์•Š์„๊นŒ ์‹ถ์–ด์„œ ๊ทธ๋ƒฅ ๋ˆˆ์œผ๋กœ๋งŒ ๋ณด๋‹ค

์ด์   ์ •๋ง ํ…Œ์ŠคํŠธํ•ด๋ณด์•„์•ผ ํ•  ๋•Œ๋‹ค ์‹ถ์–ด ํ…Œ์ŠคํŠธ !


ย ๊ธฐ์กด ์ฝ”๋ฃจํ‹ด๊ณผ ๊ฐ™์ด ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋น„ํ™œ์„ฑํ™” ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ข…๋ฃŒ๋  ์ˆ˜๋„ ์žˆ๊ณ ,

์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ์ค‘๊ฐ„์— ์ข…๋ฃŒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ๊ฑธ๊นŒ ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ํ•ด๋ณด์•˜๋Š”๋ฐ

์ •๋ง ์ž˜ ๋˜๋Š” ๊ฒƒ์ด์•ผ์˜ค.

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๋ˆŒ๋Ÿฌ๊ฐ€๋ฉฐ ์ฐพ์„ ๋•Œ ํŽธํ• ๋“ฏ !