Sobes.tech
Middle

Šta je kontekst sinhronizacije u C#?

sobes.tech АИ

Одговор од АИ

SynchronizationContext u C# pruža apstrakciju za dispatching rada na niti, omogućavajući izvršavanje delegata u određenom kontekstu. On igra ključnu ulogu u upravljanju GUI nitima (npr. WinForms, WPF) i ASP.NET, obezbeđujući ispravno ažuriranje elemenata interfejsa ili izvršavanje logike u odgovarajućoj niti.

Glavne funkcije:

  • Send(SendOrPostCallback d, object state): Sinhrono izvršava delegata u kontekstu. Nit koja poziva je blokirana do završetka delegata.
  • Post(SendOrPostCallback d, object state): Asinhrono izvršava delegata u kontekstu. Nit koja poziva nije blokirana.

Primeri upotrebe:

  • U WPF ili WinForms, SynchronizationContext.Current će predstavljati UI nit. Korišćenje Post ili Send omogućava sigurno ažuriranje elemenata interfejsa iz pozadinske niti.
  • U ASP.NET Core, po default-u, SynchronizationContext ne postoji, i zahtevi direktno dolaze na niti iz pool-a. U starijim verzijama ASP.NET, postojao je kontekst sinhronizacije koji je obezbeđivao izvršavanje zahteva u istom kontekstu.
// Primer korišćenja u WinForms za ažuriranje UI iz pozadinske niti
private void button1_Click(object sender, EventArgs e)
{
    SynchronizationContext uiContext = SynchronizationContext.Current; // Dobijanje UI konteksta

    Task.Run(() =>
    {
        // Izvršavanje duže operacije u pozadinskoj niti
        Thread.Sleep(2000);

        // Ažuriranje oznake putem konteksta sinhronizacije
        uiContext.Post(_ => label1.Text = "Ažurirano!", null);
    });
}