Middle
Ce este contextul de sincronizare în C#?
sobes.tech AI
Răspuns de la AI
Contextul de sincronizare (SynchronizationContext) în C# oferă o abstracție pentru dispatching-ul lucrului pe thread-uri, permițând executarea delegaților într-un anumit context. Acesta joacă un rol cheie în gestionarea thread-urilor GUI (de exemplu, WinForms, WPF) și ASP.NET, asigurând actualizarea corectă a elementelor interfeței sau executarea logicii în thread-ul corespunzător.
Funcții principale:
Send(SendOrPostCallback d, object state): Execută delegatul în mod sincron în context. Thread-ul care apelează este blocat până când delegatul se finalizează.Post(SendOrPostCallback d, object state): Execută delegatul în mod asincron în context. Thread-ul care apelează nu este blocat.
Exemple de utilizare:
- În WPF sau WinForms,
SynchronizationContext.Currentva reprezenta thread-ul UI. UtilizareaPostsauSendpermite actualizarea sigură a elementelor interfeței dintr-un thread de fundal. - În ASP.NET Core, în mod implicit,
SynchronizationContextnu există, iar cererile sunt trimise direct către thread-urile din pool. În versiunile mai vechi de ASP.NET, exista un context de sincronizare care asigura executarea cererilor în același context.
// Exemplu de utilizare în WinForms pentru actualizarea UI-ului dintr-un thread de fundal
private void button1_Click(object sender, EventArgs e)
{
SynchronizationContext uiContext = SynchronizationContext.Current; // Obține contextul thread-ului UI
Task.Run(() =>
{
// Execută o operație lungă pe un thread de fundal
Thread.Sleep(2000);
// Actualizează eticheta prin intermediul contextului de sincronizare
uiContext.Post(_ => label1.Text = "Actualizat!", null);
});
}