Sobes.tech
Middle

C# da sinxronizatsiya konteksti nima?

sobes.tech AI

AIdan javob

C# tilida Sinkronlashtirish konteksti (SynchronizationContext) iplar ishini boshqarish uchun abstraktsiya taqdim etadi va delegatlarni ma'lum bir kontekstda bajarishga imkon beradi. U GUI iplarini (masalan, WinForms, WPF) va ASP.NETda muhim rol o'ynaydi, interfeys elementlarini to'g'ri yangilash yoki mos ipda logikani bajarishni ta'minlaydi.

Asosiy funksiyalar:

  • Send(SendOrPostCallback d, object state): Delegatni sinxron tarzda kontekstda bajaradi. So'rov yuboruvchi ip delegat bajarilishini kutadi.
  • Post(SendOrPostCallback d, object state): Delegatni asinxron tarzda kontekstda bajaradi. So'rov yuboruvchi ip bloklanmaydi.

Foydalanish misollari:

  • WPF yoki WinFormsda, SynchronizationContext.Current UI ipini ifodalaydi. Post yoki Send dan foydalanish fon ipidan interfeys elementlarini xavfsiz tarzda yangilash imkonini beradi.
  • ASP.NET Coreda, odatda, SynchronizationContext mavjud emas va so'rovlar to'g'ridan-to'g'ri iplar havuzidan keladi. Eski ASP.NET versiyalarida, so'rovlarni bir xil kontekstda bajarishni ta'minlaydigan sinxronizatsiya konteksti mavjud edi.
// WinFormsda fon ipidan UI ni yangilash uchun misol
private void button1_Click(object sender, EventArgs e)
{
    SynchronizationContext uiContext = SynchronizationContext.Current; // UI kontekstini olish

    Task.Run(() =>
    {
        // Oraliq operatsiyani fon ipida bajarish
        Thread.Sleep(2000);

        // Sinxronizatsiya konteksti orqali etiketkani yangilash
        uiContext.Post(_ => label1.Text = "Yangilandi!", null);
    });
}