KO CSharp Cancellation - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
์ทจ์, ์ผ์์ค์ง ๋ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ
CancellationTokenSource๋ ์ทจ์ ์์ฒญ์ ์์ฑํ๊ณ , CancellationToken๋ ์์
์ ์ ๋ฌ๋ฉ๋๋ค. ์ทจ์๋ ํ์กฐ์ ์
๋๋ค. ์์
์์ ํ ํฐ์ ํ์ธํ๊ฑฐ๋ ์ ๋ฌํฉ๋๋ค. ํฌํจ๋ ์คํฌ๋ฆฝํธ๋ Cancellation๋ฅผ ์ป์ต๋๋ค. WaitAsync๋ ๋๊ธฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
๊ฐ๋จํ ์์ (Example.csx)
์ด ์์ ๋ฅผ Example.csx๋ก ๋ฐ๋ก ์ ์ฅํ๊ณ ์ด ํ์ด์ง์ ๋ค๋ฅธ ์์ ์ ๋
๋ฆฝ์ ์ผ๋ก ์คํํ์ธ์.
Example.csx:
Cancellation.ThrowIfCancellationRequested();
await WaitAsync(10);
UO.Print("Done");
์ทจ์๋ ํ๋ ฅ ๋ฐฉ์์ ๋๋ค. ํ ํฐ ํ์ธ๊ณผ WaitAsync๋ Stop์ ๋ฐ์ํ์ง๋ง ์ทจ์๋ฅผ ์ง์ํ์ง ์๋ ์ธ๋ถ ์ฝ๋๋ ๊ณ์ ์คํ๋ ์ ์์ต๋๋ค.
๊ฒฐ๊ณผ:
Done
for (int i = 0; i < 3; i++)
{
Cancellation.ThrowIfCancellationRequested();
await WaitAsync(100);
UO.Print($"Tick {i}");
}
{
using var timeout = new CancellationTokenSource(TimeSpan.FromSeconds(1));
using var linked = CancellationTokenSource.CreateLinkedTokenSource(Cancellation, timeout.Token);
try
{
await Task.Delay(10, linked.Token);
UO.Print("Operation completed");
}
catch (OperationCanceledException) when (timeout.IsCancellationRequested)
{
UO.Print("Local timeout");
}
}
์คํฌ๋ฆฝํธ ์ค์ง๋ฅผ ๋ฌดํ ์ฐจ๋จ OperationCanceledException๋ก ๋์ฒดํ์ง ๋ง์ธ์. ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์์ ์ฐจ๋จ โโํธ์ถ์ ํ ํฐ์ด ์๋ค๊ณ ํด์ ์ค๋จ๋ ์ ์์ต๋๋ค. ์ผ์ ์ค์ง์ ์ทจ์ ์์ฒญ์ ๋ชฉ์ ์ ๋ค๋ฆ
๋๋ค. ์ผ์ ์ค์ง๋ ๊ณ์์ ์ ์งํ๊ณ , ์ทจ์๋ ์คํ์ ์ข
๋ฃํฉ๋๋ค.
๊ณต์ ๋ฌธ์: ์ทจ์, ์ผ์ ์ค์ง ๋ฐ ๋ฐฐ๊ฒฝ ์คํฌ๋ฆฝํธ - Microsoft Learn.
์ทจ์ ์์ฒญ์ ํ์กฐ์ ์
๋๋ค. Task.Delay Cancellation ์ ์ก ์์ด, ์ทจ์ ์ง์ ์์ด ํ์ฌ ์์
๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธ์ถ ๋๊ธฐ๋ Stop๋ฅผ ๋๋ฅธ ํ ๊ณ์ํ ์ ์์ต๋๋ค. ์ทจ์ ์์ฒญ์ด ์ด๋ฃจ์ด์ง๋ฉด ํด๋น ์คํ์ ๋ํ ์ถ๊ฐ ๊ฒ์ ํ๋์ด ๊ธ์ง๋ฉ๋๋ค. ์ด๋ .NET ์ฝ๋๊ฐ ์ฆ์ ์ข
๋ฃ๋๋๋ก ๊ฐ์ ํ์ง ์์ต๋๋ค.