ZH TW CSharp Concurrency - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
執行緒、任務和同步
非同步允許您等待,並發允許您服務多個作業,並行允許您同時執行它們。 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 - 單獨的原子操作。不要在長時間的外部工作期間保持鎖定,並且不要在腳本完成後執行訪問會話的被遺忘的任務。