.NET

Async/await & Mẫu thiết kế

async/await, Task, ValueTask, ConfigureAwait, cancellation token, thực thi song song, deadlock

26 câu hỏi phỏng vấn·
Senior
1

Vai trò chính của từ khóa 'await' trong một phương thức bất đồng bộ là gì?

Câu trả lời

Từ khóa await tạm dừng việc thực thi phương thức bất đồng bộ cho đến khi Task hoàn tất, đồng thời giải phóng thread gọi để nó có thể xử lý các tác vụ khác. Điều này tránh việc chặn thread và cải thiện khả năng mở rộng của ứng dụng. Khác với Task.Wait() hoặc Task.Result vốn chặn thread, await cho phép sử dụng hiệu quả tài nguyên thread pool.

2

Tại sao nên tránh dùng async void ngoại trừ cho các event handler?

Câu trả lời

Các phương thức async void không thể được await và các exception ném ra bên trong không thể được bắt bởi mã gọi, gây ra crash ứng dụng. Ngoài ra, không thể unit test phương thức async void vì không có Task để await. Các event handler là ngoại lệ vì chúng được framework gọi và không thể trả về Task.

3

Trong trường hợp sử dụng nào nên ưu tiên ValueTask<T> hơn Task<T>?

Câu trả lời

ValueTask là một value type giúp tránh cấp phát heap khi kết quả đã có sẵn một cách đồng bộ, chẳng hạn như trong cache. Điều này giảm áp lực lên garbage collector trong các kịch bản hiệu năng cao. Task luôn được cấp phát trên heap ngay cả khi kết quả là đồng bộ. Chỉ dùng ValueTask khi lợi ích hiệu năng có thể đo lường được, vì sử dụng sai có thể làm giảm hiệu năng.

4

Hạn chế quan trọng nào áp dụng cho ValueTask<T> so với Task<T>?

5

Mục đích chính của ConfigureAwait(false) trong một thư viện .NET là gì?

+23 câu hỏi phỏng vấn

Nắm vững .NET cho lần phỏng vấn tiếp theo

Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.

Bắt đầu miễn phí