🔹 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)