Sobes.tech
Middle

Kas yra sinchronizacijos kontekstas C#?

sobes.tech AI

Atsakymas iš AI

SynchronizationContext C# suteikia abstrakciją, leidžiančią paskirstyti darbą tarp gijų, leidžiant vykdyti delegatus tam tikrame kontekste. Jis atlieka svarbų vaidmenį GUI gijų (pvz., WinForms, WPF) ir ASP.NET valdyme, užtikrindamas teisingą sąsajos elementų atnaujinimą arba logikos vykdymą atitinkamoje gijoje.

Pagrindinės funkcijos:

  • Send(SendOrPostCallback d, object state): Sinchroniškai vykdo delegatą kontekste. Iškviečianti gija yra blokuojama iki delegato užbaigimo.
  • Post(SendOrPostCallback d, object state): Asinchroniškai vykdo delegatą kontekste. Iškviečianti gija nėra blokuojama.

Naudojimo pavyzdžiai:

  • WPF ar WinForms, SynchronizationContext.Current atstovaus UI giją. Naudojant Post arba Send, galima saugiai atnaujinti sąsajos elementus iš foninės gijos.
  • ASP.NET Core, pagal numatytuosius nustatymus, SynchronizationContext neegzistuoja, ir užklausos tiesiogiai patenka į pool gijas. Senesnėse ASP.NET versijose egzistavo sinchronizacijos kontekstas, užtikrinantis užklausų vykdymą toje pačioje kontekste.
// Pavyzdys WinForms, kaip atnaujinti UI iš foninės gijos
private void button1_Click(object sender, EventArgs e)
{
    SynchronizationContext uiContext = SynchronizationContext.Current; // Gauti UI kontekstą

    Task.Run(() =>
    {
        // Ilgai trunkančios operacijos vykdymas foninėje gijoje
        Thread.Sleep(2000);

        // Etiketės atnaujinimas per sinchronizacijos kontekstą
        uiContext.Post(_ => label1.Text = "Atnaujinta!", null);
    });
}