Repository navigation
ES CSharp Concurrency
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
La asincronía le permite esperar, la concurrencia le permite realizar varios trabajos y el paralelismo le permite realizarlos simultáneamente. Task.Run adecuado para trabajos computacionales; por sí solo no hace que los objetos del juego sean seguros para subprocesos. UI y el mundo del juego deben ser atendidos por el host API proporcionado.
Guarde este ejemplo por separado como Example.cs. Ejecútelo independientemente de los demás ejemplos de esta página.
Example.cs:
// PROJECT-EXAMPLE
int count = 0;
System.Threading.Tasks.Parallel.For(0, 3, _ => System.Threading.Interlocked.Increment(ref count));
System.Console.WriteLine(count);Resultado:
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 protege la sección sincrónica, SemaphoreSlim.WaitAsync - espera de acceso asíncrona, Interlocked - operaciones atómicas individuales. No mantenga un bloqueo durante un trabajo externo prolongado y no ejecute tareas olvidadas accediendo a la sesión después de que se haya completado el script.
Documentación oficial: Subprocesos, tareas y sincronización - Microsoft Learn.
ClassicUO — Bad Newbie & C# Scripts IDE