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