Reference · Fondasi C#
async/Task dan LINQ
Ringkasan satu halaman. Dari Lesson 0003.
Task vs Promise [1]
| C# | TypeScript | Catatan |
|---|---|---|
async Task<Product> GetByIdAsync() | async getById(): Promise<Product> | Akhiran Async = konvensi TAP |
async Task SaveAsync() | Promise<void> | Bukan async void |
await Task.WhenAll(a, b) | await Promise.all([a, b]) | Jangan di DbContext yang sama [3] |
.Result, .Wait() | tidak ada | Memblokir thread. Jangan. |
Dua larangan di ASP.NET Core [2]
.Result/.Wait(): memblokir thread, banyak blocking call → thread pool starvation. Buat seluruh call stack async.async void: tidak bisa di-await, exception tidak bisa ditangkap pemanggil, request selesai padaawaitpertama. Hanya untuk event handler; selain ituTask.
Kapan query dieksekusi [4]
| Deferred (membangun query) | Eksekusi sekarang (SQL dikirim) |
|---|---|
Where, Select, OrderBy, Skip, Take, Include |
foreach, ToList(Async), ToArray(Async), First, Single, Count, Any, Max |
Tidak ada WhereAsync: hanya operator yang mengeksekusi query yang punya versi async. Enumerasi dua kali = query dua kali.
IEnumerable vs IQueryable [5]
IEnumerable<T> | IQueryable<T> | |
|---|---|---|
| Lambda | delegate | expression tree |
| Jalan di | memori .NET | database (diterjemahkan ke SQL) |
| Padanan Node | array.filter | prisma.findMany({ where }) |
// ❌ semua baris ditarik, filter di memori (AsEnumerable / variabel IEnumerable)
IEnumerable<Product> s = _db.Products; s.Where(p => p.Price > 100).ToList();
// ✅ filter, proyeksi, paging selagi IQueryable; ToListAsync terakhir
await _db.Products.Where(p => p.Price > 100).Select(...).ToListAsync();
Jawaban 60 detik
Where hanya membangun IQueryable (expression tree); itu deferred execution. SQL baru dikirim saat hasil dikonsumsi,
di sini oleh ToListAsync, dan karena masih IQueryable filternya jadi WHERE di database.
await tidak memblokir thread selama I/O; .Result memblokir dan bisa menyebabkan thread pool starvation.
Jadi call stack async dari Controller sampai Repository, seperti async/await di Express.
Sumber: [1] Async return types · [2] ASP.NET Core Best Practices · [3] EF Core: Asynchronous Programming · [4] EF Core: How Queries Work · [5] IQueryable<T>