Sobes.tech
Middle

C#-də sinxronizasiya konteksti nədir?

sobes.tech Süni İntellekt

AI-dan cavab

C# dilində Sinkronizasiya Konteksti (SynchronizationContext), iş parçacığı idarəetməsi üçün abstraksiya təmin edir və delegatların müəyyən bir kontekstdə icrasına imkan verir. O, GUI iş parçacqları (məsələn, WinForms, WPF) və ASP.NET-də əsas rol oynayır, interfeys elementlərinin düzgün yenilənməsini və ya müvafiq iş parçacığında loqikanın icrasını təmin edir.

Əsas funksiyalar:

  • Send(SendOrPostCallback d, object state): Delegatı sinxron şəkildə kontekstdə icra edir. Çağıran iş parçacığı delegat tamamlanana qədər bloklanır.
  • Post(SendOrPostCallback d, object state): Delegatı asinxron şəkildə kontekstdə icra edir. Çağıran iş parçacığı bloklanmır.

İstifadə nümunələri:

  • WPF və ya WinForms-də, SynchronizationContext.Current UI iş parçacığını təmsil edir. Post və ya Send istifadə etməklə, fon iş parçacığından interfeys elementlərini təhlükəsiz şəkildə yeniləmək mümkündür.
  • ASP.NET Core-da, standart olaraq, SynchronizationContext mövcud deyil və sorğular birbaşa havuzdakı iş parçacılarına göndərilir. Köhnə ASP.NET versiyalarında, sorğuların eyni kontekstdə icrasını təmin edən sinxronizasiya konteksti mövcud idi.
// WinForms-də fon iş parçacığından UI-ni yeniləmək üçün nümunə
private void button1_Click(object sender, EventArgs e)
{
    SynchronizationContext uiContext = SynchronizationContext.Current; // UI kontekstini əldə et

    Task.Run(() =>
    {
        // Uzunmüddətli əməliyyatı fon iş parçacığında icra et
        Thread.Sleep(2000);

        // Sinxronizasiya konteksti vasitəsilə etiketi yenilə
        uiContext.Post(_ => label1.Text = "Yeniləndi!", null);
    });
}