3.8 KiB
3.8 KiB
Missions / Nhiệm vụ Dài hạn
📋 Overview / Tổng quan
Missions là long-running workflows với progress tracking, phù hợp cho các nhiệm vụ phức tạp có thể cancel và track progress.
Lưu ý quan trọng:
Mission= method trong script với[Mission]attribute (không có state machine)MissionInstance= instance được tạo từ Mission method khi gọiCreateMission()(có state machine)- Xem chi tiết về state machine trong StateMachine_Design.md
🔧 Cách sử dụng / Usage
[Mission(TotalScore = 10)]
public async IAsyncEnumerable<MissionStatus> PickAndPlace(
string pickLocation,
string placeLocation,
[EnumeratorCancellation] CancellationToken ct)
{
yield return new MissionStatus { Score = 1, Message = "Moving to pick" };
await MoveTo(pickLocation);
yield return new MissionStatus { Score = 3, Message = "Picking item" };
await PerformPick();
yield return new MissionStatus { Score = 5, Message = "Moving to place" };
await MoveTo(placeLocation);
yield return new MissionStatus { Score = 8, Message = "Placing item" };
await PerformPlace();
yield return new MissionStatus { Score = 10, Message = "Completed" };
}
⚙️ Đặc điểm / Features
- IAsyncEnumerable: Return type để track progress
- CancellationToken support: Có thể cancel mission
- Progress tracking: Score/TotalScore để track tiến độ
- Per-instance MissionGlobals: Isolated execution cho mỗi mission instance
- Persist to database: Mission history được lưu vào database
🎛️ Mission Attributes / Thuộc tính Mission
[Mission(TotalScore = number)]: Định nghĩa total score cho progress tracking
📊 Mission Status / Trạng thái Mission
ScriptMissionState Enum (tương ứng với state machine trong StateMachine_Design.md):
Idle(0) - MissionInstance chưa được startRunning(1) - MissionInstance đang thực thiCanceling(2) - MissionInstance đang được cancelPausing(3) - MissionInstance đang được pausePaused(4) - MissionInstance đã bị pauseResuming(5) - MissionInstance đang được resumeCanceled(6) - MissionInstance đã bị cancelCompleted(7) - MissionInstance đã hoàn thành thành côngError(8) - MissionInstance gặp lỗi
Lưu ý:
Missionlà method trong script với[Mission]attribute (không có state machine)MissionInstancelà instance được tạo từ Mission method khi gọiCreateMission()(có state machine)- State machine quản lý state của MissionInstance, không phải Mission
- Terminal states (
Completed,Canceled,Error) là final states - khi về các state này, MissionInstance sẽ:- Lưu trạng thái, log và score vào database
- Dispose MissionInstance
🔄 Mission Management APIs / API Quản lý Mission
// Create mission
Guid missionId = CreateMission("DeliverPackage",
fromLocation: "A1",
toLocation: "B2");
// Cancel mission
CancelMission(missionId);
💾 Data Persistence / Lưu trữ Dữ liệu
Missions được persist vào database với MissionInstances và MissionLogs tables.
🔗 Related Documents / Tài liệu Liên quan
- ScriptEngine Overview - Tổng quan ScriptEngine
- Variables - Missions có thể đọc/ghi variables
- Tasks - Tasks có thể tạo/cancel missions
- Data Persistence - Chi tiết về database storage
- Built-in APIs - Mission management APIs
Last Updated: 2025-11-13