Sobes.tech
Middle

C# да синхрондоштуунун контексти эмне?

sobes.tech AI

AIден жооп

C# тилинде SynchronizationContext иштөө агымдарын башкаруу үчүн абстракция камсыз кылат жана делегаттарды белгилүү бир контекстте ишке ашырууга мүмкүндүк берет. Ал GUI агымдарын (мисалы, WinForms, WPF) жана ASP.NETте негизги роль ойнойт, интерфейс элементтерин туура жаңыртуу же логиканы тиешелүү агымда аткаруу үчүн.

Негизги функциялар:

  • Send(SendOrPostCallback d, object state): Делегатты синхрондуу түрдө контекстте аткарат. Чалган агым делегат аяктагандан кийин токтоп калат.
  • Post(SendOrPostCallback d, object state): Делегатты асинхрондуу түрдө контекстте аткарат. Чалган агым токтоп калбайт.

Колдонуу мисалдары:

  • WPF же WinFormsте, SynchronizationContext.Current UI агымын көрсөтөт. Post же Send колдонуу менен фон агымынан интерфейс элементтерин коопсуз жаңыртуу мүмкүн.
  • ASP.NET Coreде, алдын ала орнотууда, SynchronizationContext жок, жана суроолор пул агымдарына түздөн-түз келет. Эски ASP.NET версияларында, суроолорду ошол эле контекстте аткарууну камсыздаган синхрондаштыруу контексти бар болчу.
// WinFormsте UIны фон агымынан жаңыртуу үчүн мисал
private void button1_Click(object sender, EventArgs e)
{
    SynchronizationContext uiContext = SynchronizationContext.Current; // UI контекстин алуу

    Task.Run(() =>
    {
        // Узак операцияны фон агымында аткаруу
        Thread.Sleep(2000);

        // Синхрондаштыруу контексти аркылуу белгини жаңыртуу
        uiContext.Post(_ => label1.Text = "Жаңыртылды!", null);
    });
}