Middle
O que é o contexto de sincronização em C#?
sobes.tech IA
Resposta da IA
O contexto de sincronização (SynchronizationContext) em C# fornece uma abstração para a gestão da execução de threads, permitindo executar delegados num contexto específico. Desempenha um papel fundamental na gestão de threads GUI (por exemplo, WinForms, WPF) e ASP.NET, garantindo a atualização correta dos elementos da interface ou a execução de lógica no thread apropriado.
Funções principais:
Send(SendOrPostCallback d, object state): Executa de forma síncrona um delegado no contexto. O thread que chama fica bloqueado até o delegado terminar a sua execução.Post(SendOrPostCallback d, object state): Executa de forma assíncrona um delegado no contexto. O thread que chama não fica bloqueado.
Exemplos de uso:
- Em WPF ou WinForms,
SynchronizationContext.Currentrepresentará o thread da interface de utilizador. UsarPostouSendpermite atualizar de forma segura os elementos da interface a partir de um thread em segundo plano. - Em ASP.NET Core, por padrão,
SynchronizationContextnão existe, e as requisições chegam diretamente aos threads do pool. Em versões mais antigas do ASP.NET, existia um contexto de sincronização que garantia a execução das requisições no mesmo contexto.
// Exemplo de uso em WinForms para atualizar a UI a partir de um thread em segundo plano
private void button1_Click(object sender, EventArgs e)
{
SynchronizationContext uiContext = SynchronizationContext.Current; // Obtenção do contexto do thread UI
Task.Run(() =>
{
// Execução de uma operação prolongada num thread em segundo plano
Thread.Sleep(2000);
// Atualização do rótulo através do contexto de sincronização
uiContext.Post(_ => label1.Text = "Atualizado!", null);
});
}