Sobes.tech
Middle

C#'ta senkronizasyon bağlamı nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

C# dilinde SenkronizasyonBağlamı (SynchronizationContext), iş parçacıklarının yönetimi için soyutlama sağlar ve belirli bir bağlamda delegeleri çalıştırmaya olanak tanır. GUI iş parçacıkları (örneğin, WinForms, WPF) ve ASP.NET'te anahtar rol oynar, arayüz öğelerinin doğru güncellenmesini veya ilgili iş parçacığında mantığın yürütülmesini sağlar.

Ana fonksiyonlar:

  • Send(SendOrPostCallback d, object state): Bir delegayı senkron olarak bağlamda çalıştırır. Çağıran iş parçacığı, deleganın tamamlanmasını bekler.
  • Post(SendOrPostCallback d, object state): Bir delegayı asenkron olarak bağlamda çalıştırır. Çağıran iş parçacığı engellenmez.

Kullanım örnekleri:

  • WPF veya WinForms'ta, SynchronizationContext.Current UI iş parçacığını temsil eder. Post veya Send kullanmak, arka planda çalışan bir iş parçacığından arayüz öğelerini güvenli bir şekilde güncellemeye olanak tanır.
  • ASP.NET Core'da varsayılan olarak SynchronizationContext yoktur ve istekler doğrudan havuzdaki iş parçacıklarına gelir. Daha eski ASP.NET sürümlerinde, isteklerin aynı bağlamda yürütülmesini sağlayan bir senkronizasyon bağlamı vardı.
// WinForms'ta arka plan iş parçacığından UI'yi güncellemek için kullanım örneği
private void button1_Click(object sender, EventArgs e)
{
    SynchronizationContext uiContext = SynchronizationContext.Current; // UI iş parçacığı bağlamını al

    Task.Run(() =>
    {
        // Uzun süren bir işlemi arka plan iş parçacığında yürüt
        Thread.Sleep(2000);

        // Senkronizasyon bağlamı aracılığıyla etiketi güncelle
        uiContext.Post(_ => label1.Text = "Güncellendi!", null);
    });
}