完善功能

This commit is contained in:
root 2024-11-30 19:24:00 +08:00
parent c3a4faae8f
commit cf25e63de7
4 changed files with 29 additions and 10 deletions

2
.gitignore vendored
View file

@ -1,5 +1,7 @@
src/bin
src/.vs
src/obj
src/lib
src/download
src/.config
*.user

View file

@ -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

View file

@ -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

View file

@ -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;
}
}