DEV Community

Elshod Ibodullayev
Elshod Ibodullayev

Posted on

Async Await Delay

🔹 1. async va await

async → metodni asinxron qilish uchun yoziladi.

await → kutish, lekin bloklamasdan kutish.

public async Task RunAsync()
{
Console.WriteLine("Boshlanish");
await Task.Delay(2000); // 2 soniya kutadi, lekin boshqa kodlar ishlashi mumkin
Console.WriteLine("Tugadi");
}

🔹 2. Task va Task

Task → “bo‘sh ish” (natija qaytarmaydi).

Task → natija qaytaradigan async metod.

public async Task GetNumberAsync()
{
await Task.Delay(1000); // simulyatsiya
return 42;
}

int result = await GetNumberAsync(); // 42

🔹 3. Task.Delay vs Thread.Sleep

Task.Delay → asinxron kutish. Thread band bo‘lmaydi.

Thread.Sleep → synchronous kutish. Thread bloklanadi.

// Bu UI ni qotiradi
Thread.Sleep(3000);

// Bu UI ni qotirmaydi
await Task.Delay(3000);

🔹 4. Task.Run

Fon ishini alohida oqimda bajaradi.

await Task.Run(() =>
{
// Og‘ir hisob-kitob
Thread.Sleep(2000);
Console.WriteLine("Hisob tugadi");
});

🔹 5. WhenAll va WhenAny

Task.WhenAll – bir nechta vazifani parallel bajaradi va hammasi tugashini kutadi.

Task.WhenAny – birinchi tugagan vazifani kutadi.

var t1 = Task.Delay(2000);
var t2 = Task.Delay(3000);

await Task.WhenAll(t1, t2); // ikkalasini ham kutadi
await Task.WhenAny(t1, t2); // birinchi tugaganini kutadi

🔹 6. ConfigureAwait

Server (ASP.NET Core) yoki UI dasturlarida context switching muhim.

await SomeTask().ConfigureAwait(false);

👉 Bu UI kontekstiga qaytmasdan ishlash uchun kerak (ko‘p server kodlarda ishlatiladi).

🔹 7. CancellationToken

Asinxron vazifani to‘xtatish uchun ishlatiladi.

public async Task RunAsync(CancellationToken token)
{
for (int i = 0; i < 10; i++)
{
token.ThrowIfCancellationRequested();
await Task.Delay(500);
Console.WriteLine(i);
}
}

🔹 8. IAsyncEnumerable (async foreach)

Katta ma’lumot oqimini bosqichma-bosqich olish uchun.

public async IAsyncEnumerable GetNumbersAsync()
{
for (int i = 1; i <= 5; i++)
{
await Task.Delay(500);
yield return i;
}
}

await foreach (var num in GetNumbersAsync())
{
Console.WriteLine(num);
}

🔹 9. Common async API’lar

C# va .NET da tez-tez ishlatiladigan async metodlar:

Task.Delay – vaqtincha kutish

HttpClient.GetAsync – internetdan ma’lumot olish

Stream.ReadAsync / WriteAsync – fayl/stream bilan ishlash

SignalR.SendAsync – real-time xabar jo‘natish

DbContext.SaveChangesAsync – ma’lumotlar bazasiga yozish

📌 Xulosa

Thread.Sleep → bloklaydi, UI qotadi.

Task.Delay → asinxron kutadi, UI qotmaydi.

Task.Run → og‘ir ishni boshqa oqimga o‘tkazadi.

Task.WhenAll / WhenAny → parallel boshqaruv.

CancellationToken → ishni to‘xtatish.

IAsyncEnumerable → oqim bilan ketma-ket natija olish.

Top comments (0)