Sự khác biệt giữa Value Task và Task trong .NET là gì? Khi nào việc sử dụng Value Task mang lại lợi ích về hiệu năng?
Task vs ValueTask
- Task là kiểu tham chiếu (Reference Type), luôn được cấp phát trên Heap, gây áp lực lên Garbage Collection (GC).
- ValueTask là kiểu giá trị (Struct), giúp tránh cấp phát bộ nhớ nếu kết quả của tác vụ đã có sẵn (ví dụ: dữ liệu đã nằm trong Cache).
Khi nào nên dùng ValueTask?
- Khi phương thức thường xuyên trả về kết quả ngay lập tức (synchronous path).
- Trong các thư viện hiệu năng cao hoặc các vòng lặp xử lý hàng triệu request.
Lưu ý quan trọng:
- Không được await một ValueTask nhiều lần.
- Không được gọi .Result hoặc .Wait() trên một ValueTask chưa hoàn thành.
Lưu ý thực chiến: Chỉ chuyển sang dùng ValueTask khi đã đo đạc (Profiling) thấy rằng việc cấp phát Task đang gây ra vấn đề về bộ nhớ hoặc áp lực GC quá lớn.
Làm Chủ Phỏng Vấn & Nâng Cao Trình Độ Chuyên Nghiệp
Hệ thống khóa học thực chiến chuẩn Enterprise giúp bạn tự tin chinh phục mọi kỳ phỏng vấn kỹ thuật và thăng tiến thu nhập.
Tải Tuyển Tập 100+ Câu Hỏi Phỏng Vấn Chuyên Sâu (PDF)
Bộ tài liệu chuẩn Senior do Unicode Academy tuyển chọn & biên soạn, hỗ trợ tải về định dạng PDF chuẩn in ấn.
Cần Mentor Phỏng Vấn Thử 1-1 & Tối Ưu CV?
Mô phỏng phỏng vấn kỹ thuật thực tế 1-1 qua Google Meet, nhận xét chi tiết điểm mạnh/yếu và sửa CV trực tiếp cùng giảng viên Unicode.
Kiểm Tra CV Chuẩn ATS Miễn Phí
Tải CV của bạn lên để hệ thống AI rà soát từ khóa kỹ năng, định dạng và tính điểm chuẩn nhà tuyển dụng.
Câu hỏi .net liên quan cùng chủ đề
- Làm thế nào để tối ưu hóa hiệu năng và quản lý CLR Execution Model trong dự án .Net? Entry
- Làm thế nào để tối ưu hóa hiệu năng và quản lý Managed vs Unmanaged code trong dự án .Net? Entry
- Hãy giải thích chi tiết cơ chế hoạt động của Garbage Collector generations trong lập trình .Net. Junior
- Trong ASP.NET Core, làm thế nào để xử lý các ngoại lệ toàn cục (Global Exception Handling) một cách chuyên nghiệp và trả về định dạng lỗi chuẩn hóa cho client? Junior
- Trong C#, sự khác biệt cốt lõi giữa từ khóa throw và throw ex là gì và tại sao việc sử dụng throw ex lại làm mất đi Stack Trace ban đầu? Junior


