Repository navigation
KO CSharp Concurrency
Codex edited this page Oct 11, 2026
·
2 revisions
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
비동기성을 사용하면 기다릴 수 있고, 동시성을 사용하면 여러 작업을 처리할 수 있으며, 병렬성을 사용하면 여러 작업을 동시에 수행할 수 있습니다. Task.Run 계산 작업에 적합합니다. 그 자체로는 게임 개체를 스레드로부터 안전하게 만들지 않습니다. UI 및 게임 세계는 제공된 API 호스트에 의해 제공되어야 합니다.
이 예제를 Example.cs로 따로 저장하고 이 페이지의 다른 예제와 독립적으로 실행하세요.
Example.cs:
// PROJECT-EXAMPLE
int count = 0;
System.Threading.Tasks.Parallel.For(0, 3, _ => System.Threading.Interlocked.Increment(ref count));
System.Console.WriteLine(count);결과:
3
int total = await Task.Run(() => Enumerable.Range(1, 100).Sum(), Cancellation);
UO.Print(total.ToString());using System.Collections.Concurrent;
var values = new ConcurrentDictionary<string, int>();
values.TryAdd("items", 1);
values.AddOrUpdate("items", 1, (_, old) => old + 1);
UO.Print(values["items"].ToString());lock는 동기 섹션을 보호하고, SemaphoreSlim.WaitAsync - 액세스를 위한 비동기 대기, Interlocked - 개별 원자 작업을 보호합니다. 긴 외부 작업 중에는 잠금을 유지하지 말고 스크립트가 완료된 후 세션에 액세스하는 잊어버린 작업을 실행하지 마세요.
공식 문서: 스레드, 작업 및 동기화 - Microsoft Learn.
ClassicUO — Bad Newbie & C# Scripts IDE