Others
Lập trình bất đồng bộ
Lập trình bất đồng bộ là kỹ thuật lập trình cho phép dừng tiến trình mà không chặn luồng chính.
- async là từ khóa dùng để khai báo phương thức bất đồng bộ. Phương thức bất đồng bộ có thể trả về giá trị hoặc không.
- await cho phép nhường quyền điều khiển và tiếp tục thực thi khi tác vụ hoàn tất.
Tác dụng:
- Giữ UI/Gameplay mượt khi chờ I/O (HTTP, file, DB).
- Dễ chạy đồng thời nhiều I/O với
Task.WhenAll(...). - Đẩy việc CPU-bound ra nền bằng
Task.Run(...).
Ưu điểm:
- Code tuyến tính, dễ đọc.
- Không block thread → scalable.
- Hỗ trợ hủy (
CancellationToken) và gom lỗi chuẩn.
Nhược điểm / Lỗi hay gặp:
.Result/.Wait()trên main/UI → deadlock.async void(trừ event) khó bắt lỗi.- Đồng bộ hoá context phức tạp (cẩn trọng
ConfigureAwait(false)trong lib).
UniTask
UniTask là thư viện async tối ưu GC cho Unity. Cung cấp awaiter cho AsyncOperation, UnityWebRequest, Addressables… và tích hợp PlayerLoop.
Tác dụng:
awaittrực tiếp Unity API (load scene, asset, web request).- Giảm cấp phát so với
Task. - Điều khiển thời điểm tiếp tục (Update/LateUpdate/FixedUpdate).
- Hủy theo vòng đời object:
GetCancellationTokenOnDestroy().
Ưu điểm:
- Hiệu năng/GC tốt, sát Unity main thread.
- API phong phú:
UniTask.WhenAll,Delay,Yield,.Forget(handler).
Nhược điểm / Lưu ý:
- Thêm phụ thuộc vào bên thứ ba.
- Cần quản lý PlayerLoop & hủy đúng cách để tránh leak.
- Fire-and-forget phải log/bắt lỗi (
.Forget(ex => LogException)).
Gợi ý nhanh:
- I/O: tạo nhiều tác vụ →
WhenAll. - CPU:
Task.Run. - Tránh
.Result/.Wait(); tránhasync void. - Unity: ưu tiên UniTask, luôn dùng
CancellationTokengắn vòng đời object.