Löst: asynkron sömn

Senaste uppdateringen: 09/11/2023
Författare: C SourceTrail

I dagens värld av asynkron programmering står vi inför många utmaningar, varav en är att hantera förseningar eller sömn på ett asynkront sätt. Det är en vanlig praxis inom synkron programmering att orsaka en avsiktlig fördröjning med Thread.Sleep(), men i ett asynkront sammanhang använder vi Task.Delay(). Först och främst, låt oss dyka in och förstå vad async- och await-operatörerna är och det problemutrymme de löser.

Den asynkrona och väntar Operatörer

C# har async och vänta nyckelord som låter utvecklare skriva asynkron kod som ser väldigt lik ut synkron kod. Asynkron programmering mildrar problem med blockering eller väntan på långvariga operationer som I/O, nätverksförfrågningar eller tunga beräkningar, vilket förbättrar systemets prestanda.

public async Task AsyncMethod()
{
invänta AnotherMethod();
}

I metoden ovan, när koden körs och når nyckelordet await, återgår den till den som ringer och fortsätter till nästa rad först när den väntade uppgiften (AnotherMethod()) är klar.

Synkron sömn vs asynkron fördröjning

Låt oss utforska skillnaden mellan Thread.Sleep() och Task.Delay(). I synkron kod, om vi vill införa en fördröjning eller pausa exekveringen av en metod, använder vi Thread.Sleep(). Men i ett asynkront scenario har vi Task.Delay() som fungerar som en "asynkron sömn".

public void SyncMethod()
{
Tråd.Sömn(1000);
}

public async Task AsyncMethod()
{
await Task.Delay(1000);
}

I den synkrona metoden, när "sleep"-instruktionen träffas, blockeras tråden och försätts i viloläge under den angivna tidsperioden, vilket skulle kunna påverka systemets prestanda negativt. I den asynkrona metoden, när "delay"-instruktionen exekveras, pausas metoden men tråden släpps tillbaka till trådpoolen, därför finns det ingen blockering.

Bygga en asynkron sömnmetod

Låt oss sätta ihop en metod som illustrerar begreppet asynkron sömn. Tänk på att vi har någon beräkningsintensiv metod som vi måste håna beteendet för.

public async Task ComputeIntensiveMethod()
{
for (int i = 0; i < 5; i++) { await Task.Delay(2000); Console.WriteLine("Utförande efter fördröjning"); } } [/code] I metoden ovan kommer Task.Delay att introducera en asynkron fördröjning på 2 sekunder efter varje exekvering av utskriftssatsen, vilket simulerar en asynkron viloläge. Asynkron programmering är avgörande för att bygga lyhörda och effektiva applikationer. Med C#s avancerade funktioner som async/await och Task.Delay() kan du utnyttja fördelarna med asynkronmönsterprogrammering till dess fulla potential. Kom ihåg att Task.Delay-metoden är mycket mer effektiv jämfört med Thread.Sleep i den asynkrona programmeringsvärlden, eftersom den inte blockerar tråden samtidigt som den orsakar en fördröjning. Att använda dessa rättigheter kan avsevärt öka din applikations prestanda.

Relaterade inlägg: