Middle
Kas ir sinhronizācijas konteksts C#?
sobes.tech AI
Atbilde no AI
C# valodā SynchronizationContext nodrošina abstrakciju darba nosūtīšanai uz dažādām pavedienu kontekstiem, ļaujot izpildīt delegātus noteiktā kontekstā. Tas spēlē galveno lomu GUI pavedienu (piemēram, WinForms, WPF) un ASP.NET pārvaldībā, nodrošinot pareizu interfeisa elementu atjaunināšanu vai loģikas izpildi atbilstošajā pavedienā.
Galvenās funkcijas:
Send(SendOrPostCallback d, object state): Sinhroni izpilda delegātu kontekstā. Izsaucējošais pavedienis tiek bloķēts līdz delegāta pabeigšanai.Post(SendOrPostCallback d, object state): Asinhroni izpilda delegātu kontekstā. Izsaucējošais pavedienis netiek bloķēts.
Piemēri:
- WPF vai WinForms,
SynchronizationContext.Currentpārstāvēs UI pavedienu. IzmantojotPostvaiSend, var droši atjaunināt interfeisa elementus no fonā esoša pavediena. - ASP.NET Core, pēc noklusējuma,
SynchronizationContextnav pieejams, un pieprasījumi tiek tieši nosūtīti uz pulu pavedieniem. Vecākās ASP.NET versijās bija sinhronizācijas konteksts, kas nodrošināja pieprasījumu izpildi tajā pašā kontekstā.
// WinForms piemērs UI atjaunināšanai no fonā esoša pavediena
private void button1_Click(object sender, EventArgs e)
{
SynchronizationContext uiContext = SynchronizationContext.Current; // Iegūt UI kontekstu
Task.Run(() =>
{
// Ilgstošas operācijas izpilde fonā
Thread.Sleep(2000);
// Etiķetes atjaunināšana caur sinhronizācijas kontekstu
uiContext.Post(_ => label1.Text = "Atjaunināts!", null);
});
}