
В днешния свят на асинхронно програмиране сме изправени пред много предизвикателства, едно от които е обработката на закъснения или заспиване по асинхронен начин. Често срещана практика в синхронното програмиране е да се предизвика умишлено забавяне с помощта на Thread.Sleep(), но в асинхронен контекст ние използваме Task.Delay(). Първо, нека се потопим и разберем какво представляват операторите async и await и проблемното пространство, което разрешават.
Операторите async и await
C# има асинхронен намлява очаквам ключови думи, които позволяват на разработчиците да пишат асинхронен код, който изглежда много подобен на синхронния код. Асинхронното програмиране смекчава проблемите с блокирането или изчакването на дълготрайни операции като I/O, мрежови заявки или тежки изчисления, като впоследствие подобрява производителността на системата.
публична async задача AsyncMethod()
{
await AnotherMethod();
}
В горния метод, когато кодът се изпълни и достигне ключовата дума await, той се връща към извикващия и продължава към следващия ред само когато чаканата задача (AnotherMethod()) завърши.
Синхронно заспиване срещу асинхронно забавяне
Нека проучим разликата между Thread.Sleep() и Task.Delay(). В синхронния код, ако искаме да въведем забавяне или да поставим на пауза изпълнението на метод, използваме Thread.Sleep(). В асинхронен сценарий обаче имаме Task.Delay(), който действа като „асинхронно заспиване“.
public void SyncMethod()
{
Thread.Sleep(1000);
}
публична async задача AsyncMethod()
{
изчакайте Task.Delay(1000);
}
При синхронния метод, когато се изпълни инструкцията за заспиване, нишката се блокира и се поставя в режим на заспиване за определен период от време, което може да повлияе отрицателно на производителността на системата. В асинхронния метод, когато се изпълни инструкцията за забавяне, методът се поставя на пауза, но нишката се връща обратно към пула на нишките, следователно няма блокиране.
Изграждане на асинхронен метод на заспиване
Нека съставим метод, който илюстрира концепцията за асинхронен сън. Помислете, че имаме някакъв интензивен изчислителен метод, за който трябва да се подиграем на поведението.
публична асинхронна задача ComputeIntensiveMethod()
{
for (int i = 0; i < 5; i++) { await Task.Delay(2000); Console.WriteLine("Изпълнение след забавяне"); } } [/code] В горния метод Task.Delay ще въведе асинхронно забавяне от 2 секунди след всяко изпълнение на оператора за печат, следователно симулира асинхронно заспиване. Асинхронното програмиране е жизненоважно за изграждането на отзивчиви и ефективни приложения. С разширените възможности на C# като async/await и Task.Delay(), можете да се възползвате от предимствата на програмирането с асинхронни шаблони до пълния му потенциал. Не забравяйте, че методът Task.Delay е много по-ефективен в сравнение с Thread.Sleep в света на асинхронното програмиране, тъй като не блокира нишката, докато причинява забавяне. Използването на тези права може значително да повиши производителността на вашето приложение.