Skip to content

JA CSharp Concurrency

Codex edited this page Oct 11, 2026 · 2 revisions

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

スレッド、タスク、同期

マニュアルC# · 例題UO

非同期では待機することができ、同時実行では複数のジョブを処理でき、並列ではそれらを同時に実行できます。 Task.Run 計算作業に適しています。それ自体では、ゲーム オブジェクトをスレッド セーフにしません。 UI とゲーム世界は、提供された API ホストによって提供される必要があります。

簡単な例 (Example.cs)

この例を 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。

Clone this wiki locally