Skip to content

IT CSharp Concurrency

Codex edited this page Oct 11, 2026 · 2 revisions

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

Discussioni, attività e sincronizzazione

Manuale C# · Esempi UO

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.

Esempio semplice (Example.cs)

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.

Clone this wiki locally