Lista segura de hilos en C#
-
Lista segura de hilos con la clase
ConcurrentBag
enC#
-
Lista segura de hilos con la clase
ConcurrentQueue
enC#
-
Lista segura de hilos con la clase
SynchronizedCollection
enC#
Este tutorial presentará los métodos para crear una lista segura para hilos en C#.
Lista segura de hilos con la clase ConcurrentBag
en C#
La clase ConcurrentBag
se utiliza para crear una colección de datos desordenada y segura para hilos en C#. La clase ConcurrentBag
es muy similar a la List
en C# y se puede usar como una lista segura para hilos en C#. Para usar la clase ConcurrentBag
, tenemos que importar el espacio de nombres System.Collections.Concurrent
en nuestro proyecto. Varios hilos pueden acceder a un objeto ConcurrentBag
simultáneamente, pero el contenido dentro del objeto ConcurrentBag
solo se puede modificar de forma síncrona. Lo hace utilizable con múltiples hilos para operaciones simultáneas y a salvo de la pérdida accidental de datos. El siguiente ejemplo de código nos muestra cómo crear una lista segura para hilos con la clase ConcurrentBag
en C#.
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
namespace thread_safe_list {
class Program {
static void Main(string[] args) {
ConcurrentBag<int> numbers = new ConcurrentBag<int>();
numbers.Add(0);
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
numbers.Add(4);
numbers.Add(5);
Console.WriteLine("ConcurrentBag");
foreach (var number in numbers) {
Console.WriteLine(number);
}
List<int> nums = new List<int>();
nums.Add(0);
nums.Add(1);
nums.Add(2);
nums.Add(3);
nums.Add(4);
nums.Add(5);
Console.WriteLine("List");
foreach (var number in nums) {
Console.WriteLine(number);
}
}
}
}
Producción :
ConcurrentBag
5
4
3
2
1
0
List
0
1
2
3
4
5
En el código anterior, creamos una lista segura para hilos con la clase ConcurrentBag
en C#. La función para agregar nuevos elementos Add()
es la misma en las estructuras de datos ConcurrentBag
y List
. La única diferencia es que la Lista
funciona según el principio de primero en entrar, primero en salir (FIFO), mientras que el ConcurrentBag
funciona según el principio de último en entrar, primero en salir (LIFO). Este problema se aborda en los ejemplos de código a continuación.
Lista segura de hilos con la clase ConcurrentQueue
en C#
La clase ConcurrentQueue
se utiliza para crear una estructura de datos de cola segura para hilos en C#. La ConcurrentQueue
funciona según el principio de primero en entrar, primero en salir, al igual que la List
en C#. El objeto ConcurrentQueue
se puede utilizar en lugar del objeto List
para crear una estructura de datos segura para hilos. Vea el siguiente código de ejemplo.
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
namespace thread_safe_list {
class Program {
static void Main(string[] args) {
Console.WriteLine("Concurrent Queue");
ConcurrentQueue<int> numbers = new ConcurrentQueue<int>();
numbers.Enqueue(0);
numbers.Enqueue(1);
numbers.Enqueue(2);
numbers.Enqueue(3);
numbers.Enqueue(4);
numbers.Enqueue(5);
foreach (var number in numbers) {
Console.WriteLine(number);
}
Console.WriteLine("List");
List<int> nums = new List<int>();
nums.Add(0);
nums.Add(1);
nums.Add(2);
nums.Add(3);
nums.Add(4);
nums.Add(5);
foreach (var number in nums) {
Console.WriteLine(number);
}
}
}
}
Producción :
Concurrent Queue
0
1
2
3
4
5
List
0
1
2
3
4
5
En el código anterior, creamos una estructura de datos List segura para hilos con la clase ConcurrentQueue
en C#. Hay bastantes diferencias entre los métodos disponibles en las estructuras de datos List
y ConcurrentQueue
. Por ejemplo, el método para agregar un nuevo elemento en la estructura de datos Lista
es Add()
. Por el contrario, el método para agregar un nuevo elemento en la estructura de datos ConcurrentQueue
es Enqueue()
, que es como una estructura de datos convencional Queue
en C#. Este inconveniente de la estructura de datos ConcurrentQueue
se aborda en el siguiente ejemplo.
Lista segura de hilos con la clase SynchronizedCollection
en C#
La clase SynchronizedCollection
se utiliza para crear una colección segura para hilos de objetos de algún tipo especificado en C#. La estructura de datos SynchronizedCollection
es muy similar a la estructura de datos List
en C#. Ambas estructuras de datos funcionan según el principio de primero en entrar, primero en salir. La función para agregar un nuevo elemento en las estructuras de datos SynchronizedCollection
y List
es Add()
. Vea el siguiente ejemplo.
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
namespace thread_safe_list {
class Program {
static void Main(string[] args) {
Console.WriteLine("Synchronized Collection");
SynchronizedCollection<int> numbers = new SynchronizedCollection<int>();
numbers.Add(0);
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
numbers.Add(4);
numbers.Add(5);
foreach (var number in numbers) {
Console.WriteLine(number);
}
Console.WriteLine("List");
List<int> nums = new List<int>();
nums.Add(0);
nums.Add(1);
nums.Add(2);
nums.Add(3);
nums.Add(4);
nums.Add(5);
foreach (var number in nums) {
Console.WriteLine(number);
}
}
}
}
Producción :
Synchronized Collection
0
1
2
3
4
5
List
0
1
2
3
4
5
En el código anterior, creamos una lista segura para hilos con la clase SynchronizedCollection
en C#. Hasta ahora, este enfoque es el mejor entre los otros dos enfoques para implementar la funcionalidad de una estructura de datos de lista en C# porque sigue el mismo principio FIFO y tiene los mismos métodos.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedInArtículo relacionado - Csharp Thread
- Detener un hilo en C#
- Thread.Sleep() en C#
- Espere a que termine un subproceso en C#
- Thread vs Task en C#
- Declaración de lock en C#