Coding with .NET, Angular and much more!
Just a personal space where I share what I learn, what I build, and everything in between.
Điều gì xảy ra trước khi Controller được gọi?
Rất nhiều người nghĩ, flow của ASP.NET Core chỉ đơn giản: HTTP Request -> Controller -> Return JSON. Thực tế, trước khi request đụng được Action bên trong Controller, nó phải đi qua khá nhiều tầng xử lý khác nhau dưới framework, đã được nhắc ở bài viết cũ, "Controller hoạt động thế nào?". Trong đó, Middleware và Filter là hai thứ dễ bị nhầm nhất. Vì nhìn qua, cả hai đều có thể log, validate, bắt exception hay xử lý before/after request. Nhưng thực tế nó nằm ở hai pipeline hoàn toàn khác nhau.
IEnumerable và IQueryable khác nhau ở đâu?
LINQ trong .NET khiến việc query dữ liệu trong C# trở nên quá "mượt". Chỉ cần .Where(), .Select(), .OrderBy() là mọi thứ nhìn rất đơn giản. Và cũng vì syntax quá giống nhau nên rất nhiều người lầm tưởng IEnumerable và IQueryable giống nhau, chỉ khác mỗi "chỗ chạy"
Cú lừa của Dependency Injection
Mỗi ngày sử dụng AddScoped, AddSingleton, constructor injection đã trở thành phản xạ vô điều kiện. Chỉ cần khai báo dependency trong constructor, ASP.NET Core sẽ tự "nhét" object vào đúng chỗ nó cần. Sự tiện lợi này khiến nhiều người nghĩ Dependency Injection đơn giản là framework tự new object chính mình. Nhưng phía dưới constructor injection là một hệ thống build dependency graph, cache object theo lifetime, resolve đệ quy và quản lý dòng đời phức tạp hơn tưởng tượng rất nhiều.
Pipeline của ASP.NET Core chạy ra sao?
Hỏi Middleware là gì, hầu hết ai cũng biết: "Nó là một đường ống Pipeline, request đi vào rồi response đi ra". Đúng, nhưng dừng ở đây vẫn chưa đủ. Bài này sẽ tóm tắt cơ bản nhất về Middleware, sau đó "lặn" xuống xem .NET dùng cơ chế gì để móc nối các component này thành một chuỗi liền mạch.
Khi await giải phóng Thread, ai đang chạy đoạn code còn lại?
Tiếp nối bài trước, khi gặp await, Thread sẽ được giải phóng mang đi phục vụ request khác. Nhưng một câu hỏi đặt ra: "Nếu Thread bị thu hồi, CPU buông tay, thì ứng dụng dùng cái gì để duy trì kết nối và chờ dữ liệu kết quả trả về? Câu trả lời ngắn gọn: không có cái Thread nào ở đây cả.
Async và await đã làm gì bên dưới?
Một lập trình viên khi bắt đầu làm quen với C#, chắc hẳn có lúc hay ngày nào cũng gõ async/await như một thói quen, nhưng đôi khi vô tình không để ý hoặc không hiểu thật sự cơ chế đằng sau nó. Bài này mình sẽ nói về luồng chạy thực tế của hai keyword này, để xem trình biên dịch nó sẽ chạy như thế nào?!