Sobes.tech
Middle

Kas ir sinhronizācijas konteksts C#?

sobes.tech AI

Atbilde no AI

C# valodā SynchronizationContext nodrošina abstrakciju darba nosūtīšanai uz dažādām pavedienu kontekstiem, ļaujot izpildīt delegātus noteiktā kontekstā. Tas spēlē galveno lomu GUI pavedienu (piemēram, WinForms, WPF) un ASP.NET pārvaldībā, nodrošinot pareizu interfeisa elementu atjaunināšanu vai loģikas izpildi atbilstošajā pavedienā.

Galvenās funkcijas:

  • Send(SendOrPostCallback d, object state): Sinhroni izpilda delegātu kontekstā. Izsaucējošais pavedienis tiek bloķēts līdz delegāta pabeigšanai.
  • Post(SendOrPostCallback d, object state): Asinhroni izpilda delegātu kontekstā. Izsaucējošais pavedienis netiek bloķēts.

Piemēri:

  • WPF vai WinForms, SynchronizationContext.Current pārstāvēs UI pavedienu. Izmantojot Post vai Send, var droši atjaunināt interfeisa elementus no fonā esoša pavediena.
  • ASP.NET Core, pēc noklusējuma, SynchronizationContext nav pieejams, un pieprasījumi tiek tieši nosūtīti uz pulu pavedieniem. Vecākās ASP.NET versijās bija sinhronizācijas konteksts, kas nodrošināja pieprasījumu izpildi tajā pašā kontekstā.
// WinForms piemērs UI atjaunināšanai no fonā esoša pavediena
private void button1_Click(object sender, EventArgs e)
{
    SynchronizationContext uiContext = SynchronizationContext.Current; // Iegūt UI kontekstu

    Task.Run(() =>
    {
        // Ilgstošas operācijas izpilde fonā
        Thread.Sleep(2000);

        // Etiķetes atjaunināšana caur sinhronizācijas kontekstu
        uiContext.Post(_ => label1.Text = "Atjaunināts!", null);
    });
}