Sobes.tech
Middle

რა არის სინქრონიზაციის კონტექსტი C#-ში?

sobes.tech AI

პასუხი AI-სგან

C# dilində SynchronizationContext, iş parçacığı idarəetməsi üçün abstraksiya təmin edir və delegate-ləri müəyyən bir kontekstdə icra etməyə imkan verir. O, GUI iş parçaları (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): Sinxron şəkildə delegate-i kontekst daxilində icra edir. Çağıran iş parçacığı delegate-in tamamlanmasını gözləyir.
  • Post(SendOrPostCallback d, object state): Asinxron şəkildə delegate-i kontekst daxilində 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);

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