
Async/await และรูปแบบ
async/await, Task, ValueTask, ConfigureAwait, cancellation token, การทำงานแบบขนาน, deadlock
1บทบาทหลักของคีย์เวิร์ด 'await' ในเมธอดแบบอะซิงโครนัสคืออะไร?
บทบาทหลักของคีย์เวิร์ด 'await' ในเมธอดแบบอะซิงโครนัสคืออะไร?
คำตอบ
คีย์เวิร์ด await จะระงับการทำงานของเมธอดแบบอะซิงโครนัสจนกว่า Task จะเสร็จสิ้น พร้อมทั้งปลดปล่อย thread ที่เรียกใช้ให้สามารถประมวลผลงานอื่นได้ ซึ่งช่วยหลีกเลี่ยงการบล็อก thread และปรับปรุงความสามารถในการขยายตัวของแอปพลิเคชัน ต่างจาก Task.Wait() หรือ Task.Result ที่บล็อก thread นั้น await ช่วยให้ใช้ทรัพยากร thread pool ได้อย่างมีประสิทธิภาพ
2ทำไมจึงควรหลีกเลี่ยง async void ยกเว้นสำหรับ event handler?
ทำไมจึงควรหลีกเลี่ยง async void ยกเว้นสำหรับ event handler?
คำตอบ
เมธอด async void ไม่สามารถถูก await ได้ และ exception ที่ถูกโยนภายในไม่สามารถถูกจับโดยโค้ดที่เรียกใช้ได้ ส่งผลให้แอปพลิเคชันแครช นอกจากนี้ยังไม่สามารถทำ unit test เมธอด async void ได้เพราะไม่มี Task ให้ await เหตุการณ์ event handler เป็นข้อยกเว้นเพราะถูกเรียกโดย framework และไม่สามารถคืนค่า Task ได้
3ในกรณีการใช้งานใดที่ควรเลือกใช้ ValueTask<T> แทน Task<T>?
ในกรณีการใช้งานใดที่ควรเลือกใช้ ValueTask<T> แทน Task<T>?
คำตอบ
ValueTask เป็น value type ที่หลีกเลี่ยงการจัดสรร heap เมื่อผลลัพธ์พร้อมใช้งานแบบซิงโครนัสอยู่แล้ว เช่นในกรณีของ cache ซึ่งช่วยลดภาระต่อ garbage collector ในสถานการณ์ที่ต้องการประสิทธิภาพสูง ส่วน Task จะถูกจัดสรรบน heap เสมอแม้ว่าผลลัพธ์จะเป็นแบบซิงโครนัส ให้ใช้ ValueTask เฉพาะเมื่อสามารถวัดผลการเพิ่มประสิทธิภาพได้ เพราะการใช้งานที่ไม่ถูกต้องอาจทำให้ประสิทธิภาพลดลง
ข้อจำกัดสำคัญใดที่ใช้กับ ValueTask<T> เมื่อเทียบกับ Task<T>?
วัตถุประสงค์หลักของ ConfigureAwait(false) ในไลบรารี .NET คืออะไร?
+23 คำถามสัมภาษณ์
หัวข้อสัมภาษณ์ .NET อื่นๆ
พื้นฐาน C#
LINQ & Delegates
พื้นฐานสำคัญของภาษา C#
พื้นฐาน ASP.NET Core
วงจรชีวิตของ request ใน ASP.NET Core
Configuration & Settings
วงจรชีวิตของแอปพลิเคชัน
Dependency Injection
Entity Framework Core
Minimal APIs
การพัฒนา Web API
Async ใน ASP.NET Core
Authentication & Authorization
HttpClient & Networking
การซีเรียลไลซ์ JSON
Entity Framework Core ขั้นสูง
ฟีเจอร์ขั้นสูงของ C#
Clean Architecture
Logging, Monitoring & Observability
Unit Testing และ xUnit
การทดสอบแบบบูรณาการ
Docker & Containerization
การจัดการแพ็กเกจ NuGet
Memory Management & GC
การเขียนโปรแกรมแบบรีแอกทีฟ
.NET Design Patterns
การเพิ่มประสิทธิภาพการทำงาน
ความปลอดภัยและ Best Practices
SignalR และเรียลไทม์
สถาปัตยกรรม Microservices
เชี่ยวชาญ .NET สำหรับการสัมภาษณ์ครั้งถัดไป
เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์
เริ่มใช้ฟรี