Middle
¿Qué es el contexto de sincronización en C#?
sobes.tech AI
Respuesta de la IA
El contexto de sincronización (SynchronizationContext) en C# proporciona una abstracción para la gestión de la ejecución de hilos, permitiendo ejecutar delegados en un contexto determinado. Juega un papel clave en la gestión de hilos GUI (por ejemplo, WinForms, WPF) y ASP.NET, asegurando la actualización correcta de los elementos de la interfaz o la ejecución de lógica en el hilo correspondiente.
Funciones principales:
Send(SendOrPostCallback d, object state): Ejecuta de forma sincrónica un delegado en el contexto. El hilo que llama se bloquea hasta que el delegado termina su ejecución.Post(SendOrPostCallback d, object state): Ejecuta de forma asíncrona un delegado en el contexto. El hilo que llama no se bloquea.
Ejemplos de uso:
- En WPF o WinForms,
SynchronizationContext.Currentrepresentará el hilo de la interfaz de usuario. UsarPostoSendpermite actualizar de forma segura los elementos de la interfaz desde un hilo en segundo plano. - En ASP.NET Core, por defecto, no existe
SynchronizationContext, y las solicitudes llegan directamente a los hilos del pool. En versiones más antiguas de ASP.NET, existía un contexto de sincronización que garantizaba la ejecución de las solicitudes en el mismo contexto.
// Ejemplo de uso en WinForms para actualizar la interfaz desde un hilo en segundo plano
private void button1_Click(object sender, EventArgs e)
{
SynchronizationContext uiContext = SynchronizationContext.Current; // Obtención del contexto del hilo de la interfaz
Task.Run(() =>
{
// Ejecución de una operación prolongada en un hilo en segundo plano
Thread.Sleep(2000);
// Actualización de la etiqueta a través del contexto de sincronización
uiContext.Post(_ => label1.Text = "¡Actualizado!", null);
});
}