Repository navigation
DE CSharp Concurrency
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Durch Asynchronität können Sie warten, durch Parallelität können Sie mehrere Aufgaben ausführen, durch Parallelität können Sie diese gleichzeitig ausführen. Task.Run geeignet für Rechenarbeiten; Es allein macht Spielobjekte nicht threadsicher. UI und die Spielwelt müssen vom bereitgestellten API-Host bedient werden.
Speichern Sie dieses Beispiel separat als Example.cs. Führen Sie es unabhängig von den anderen Beispielen dieser Seite aus.
Example.cs:
// PROJECT-EXAMPLE
int count = 0;
System.Threading.Tasks.Parallel.For(0, 3, _ => System.Threading.Interlocked.Increment(ref count));
System.Console.WriteLine(count);Ergebnis:
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 schützt den synchronen Abschnitt, SemaphoreSlim.WaitAsync – asynchrones Warten auf Zugriff, Interlocked – einzelne atomare Operationen. Halten Sie bei längerer externer Arbeit keine Sperre und führen Sie keine vergessenen Aufgaben aus, indem Sie auf die Sitzung zugreifen, nachdem das Skript abgeschlossen ist.
Offizielle Dokumentation: Threads, Aufgaben und Synchronisierung – Microsoft Learn.
ClassicUO — Bad Newbie & C# Scripts IDE