diff --git a/.gitignore b/.gitignore index 1279cec..316d403 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ src/bin src/.vs src/obj +src/lib +src/download src/.config *.user \ No newline at end of file diff --git a/src/Controllers/ManagementController.cs b/src/Controllers/ManagementController.cs index 82d150b..ac984d1 100644 --- a/src/Controllers/ManagementController.cs +++ b/src/Controllers/ManagementController.cs @@ -91,9 +91,9 @@ namespace iFileProxy.Controllers } // 如果任务正在运行,先尝试中断 - if (taskInfo.Status == TaskState.Running) + if (taskInfo.Status == TaskState.Running && _taskManager.GetRunningTaskInfo(taskId) != null) { - _taskManager.TryKillTask(taskInfo); + _taskManager.TryKillTask(_taskManager.GetRunningTaskInfo(taskId)); } // 删除任务记录 @@ -165,7 +165,7 @@ namespace iFileProxy.Controllers try { // 先获取任务信息 - var taskInfo = _dbGateService.GetTaskDetail(taskId); + var taskInfo = _taskManager.GetRunningTaskInfo(taskId); if (taskInfo == null) { return Ok(new CommonRsp diff --git a/src/Services/DatabaseGateService.cs b/src/Services/DatabaseGateService.cs index 20f0b61..9e864b4 100644 --- a/src/Services/DatabaseGateService.cs +++ b/src/Services/DatabaseGateService.cs @@ -324,7 +324,7 @@ namespace iFileProxy.Services sqlCmd.Parameters.AddWithValue("@tid", taskInfo.TaskId); if (sqlCmd.ExecuteNonQuery() >= 1) { - _logger.Debug($"Task: {taskInfo.TaskId} Status Change to {taskInfo.Status}"); + _logger.Information($"Task: {taskInfo.TaskId} Status Change to {taskInfo.Status}"); return true; } else diff --git a/src/Services/TaskManager.cs b/src/Services/TaskManager.cs index c44c169..1751310 100644 --- a/src/Services/TaskManager.cs +++ b/src/Services/TaskManager.cs @@ -237,7 +237,6 @@ namespace iFileProxy.Services { _logger.Error($"task: {taskInfo.TaskId} 进程退出状态异常 ExitCode: {aria2c.ExitCode}"); taskInfo.Status = TaskState.Error; - _dbGateService.UpdateTaskStatus(taskInfo); } else { @@ -341,6 +340,16 @@ namespace iFileProxy.Services return new ServerTaskLoadInfo { Queuing = _pendingTasks.Count , Running = _runningTasks.Count}; } + + public TaskInfo? GetRunningTaskInfo(string taskId) + { + if (_runningTasks.TryGetValue(taskId, out var taskInfo)) + { + return taskInfo; + } + return null; + } + public void TryKillTask(TaskInfo taskInfo) { try @@ -349,13 +358,20 @@ namespace iFileProxy.Services if (_runningTasks.TryGetValue(taskInfo.TaskId, out var runningTask)) { _logger.Information($"正在尝试中断任务: {taskInfo.TaskId}"); - - // 从运行任务字典中移除 - _runningTasks.Remove(taskInfo.TaskId); - // 更新任务状态为已取消 taskInfo.Status = TaskState.Canceled; _dbGateService.UpdateTaskStatus(taskInfo); + + // 如果存在进程则kill掉 + foreach (var p in Process.GetProcesses()) + { + if (p.Id == taskInfo.Process.Id) + p.Kill(); + } + + // 从运行任务字典中移除 + _runningTasks.Remove(taskInfo.TaskId); + // 删除未完成的文件 var filePath = Path.Combine(_appConfig.DownloadOptions.SavePath, taskInfo.FileName); @@ -382,7 +398,8 @@ namespace iFileProxy.Services } catch (Exception ex) { - _logger.Error($"中断任务时发生错误: {ex.Message}"); + _logger.Error("中断任务时发生错误: {ex}",ex); + throw; } }