Repository navigation
IT CSharp Concurrency
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
L'asincronia ti permette di aspettare, la concorrenza ti permette di svolgere più lavori, il parallelismo ti permette di eseguirli contemporaneamente. Task.Run adatto per lavori computazionali; di per sé non rende gli oggetti di gioco thread-safe. UI e il mondo di gioco devono essere serviti dall'host API fornito.
Salvare questo esempio separatamente come Example.cs. Eseguirlo indipendentemente dagli altri esempi di questa pagina.
Example.cs:
// PROJECT-EXAMPLE
int count = 0;
System.Threading.Tasks.Parallel.For(0, 3, _ => System.Threading.Interlocked.Increment(ref count));
System.Console.WriteLine(count);Risultato:
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 protegge la sezione sincrona, SemaphoreSlim.WaitAsync - attesa asincrona per l'accesso, Interlocked - operazioni atomiche individuali. Non mantenere un blocco durante un lungo lavoro esterno e non eseguire attività dimenticate accedendo alla sessione dopo il completamento dello script.
Documentazione ufficiale: Thread, attività e sincronizzazione - Microsoft Learn.
ClassicUO — Bad Newbie & C# Scripts IDE