Skip to main content

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:

  • await trự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ánh async void.
  • Unity: ưu tiên UniTask, luôn dùng CancellationToken gắn vòng đời object.