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)