protected void ExecuteTask(SaveTask task) { try { task.Execute(); } finally { // 保证数据同步 Volatile.Write(ref _currentTaskFinished, true); } }
/// <summary> /// 需要外部调用,用于检测异步执行的存档操作是否完成 /// </summary> public void Update() { if (_currentTask != null) { // 保证数据同步 if (Volatile.Read(ref _currentTaskFinished)) { if (_currentTask.type == TaskType.LOAD && _currentTask.isSuccess) { _currentTask.source.Write(_currentTask.data); } OnFinishTask(_currentTask); _currentTask = null; } } else if (_taskQueue.Count > 0) { _currentTask = _taskQueue.Dequeue(); _currentTaskFinished = false; OnBeginTask(_currentTask); } }
protected abstract void OnFinishTask(SaveTask task);
protected abstract void OnBeginTask(SaveTask task);
public void NewDeleteTask(IStorageTarget target) { CheckDispos(); _taskQueue.Enqueue(SaveTask.CreateDeleteTask(target)); }
public void NewSaveTask(IStorageSource source, IStorageTarget target) { CheckDispos(); _taskQueue.Enqueue(SaveTask.CreateSaveTask(target, source.Read())); }
public void NewLoadTask(IStorageSource source, IStorageTarget target) { CheckDispos(); _taskQueue.Enqueue(SaveTask.CreateLoadTask(source, target)); }