Sobes.tech
Middle

Ի՞նչ է C#-ում սինխրոնիզացիայի կոնտեքստը։

sobes.tech AI

Պատասխան AI-ից

C# լեզվում SynchronizationContext-ը տրամադրում է աբստրակցիա աշխատանքների dispatch-ի համար, թույլ տալով գործարկել delegate-ներ որոշակի կոնտեքստում։ Այն կարևոր դեր է խաղում GUI թելերի (օրինակ, WinForms, WPF) և ASP.NET-ի կառավարման մեջ, ապահովելով ճիշտ ինտերֆեյսի տարրերի թարմացում կամ տրամաբանական աշխատանքների կատարմամբ համապատասխան թելում։

Հիմնական ֆունկցիաներ՝

  • Send(SendOrPostCallback d, object state): Սինխրոն կերպով executes delegate-ը կոնտեքստում։ Զանգահարի թելը բլոկվում է մինչև delegate-ի ավարտը։
  • Post(SendOrPostCallback d, object state): Ասինխրոն կերպով executes delegate-ը կոնտեքստում։ Զանգահարի թելը չի բլոկվում։

Օգտագործման օրինակներ՝

  • 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);
    });
}