Sobes.tech
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.Current representará el hilo de la interfaz de usuario. Usar Post o Send permite 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);
    });
}