增强错误处理和日志记录,添加HTTP请求超时设置
This commit is contained in:
parent
e4148f76fe
commit
d6d1bf79f0
@ -34,7 +34,19 @@ public class CloseWorker : BackgroundService
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
$"执行控制器发生错误,错误信息:ex{e.StackTrace}".Error();
|
var errorMessage = $"执行控制器发生错误\n" +
|
||||||
|
$"异常类型: {e.GetType().Name}\n" +
|
||||||
|
$"异常消息: {e.Message}\n" +
|
||||||
|
$"堆栈跟踪: {e.StackTrace}\n" +
|
||||||
|
$"内部异常: {e.InnerException?.Message}\n" +
|
||||||
|
$"内部堆栈: {e.InnerException?.StackTrace}\n" +
|
||||||
|
$"源: {e.Source}\n" +
|
||||||
|
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
|
||||||
|
errorMessage.Error();
|
||||||
|
|
||||||
|
// 同时使用结构化日志记录
|
||||||
|
_logger.LogError(e, "CloseWorker执行发生异常: {ExceptionType} - {Message}",
|
||||||
|
e.GetType().Name, e.Message);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@ -46,30 +58,66 @@ public class CloseWorker : BackgroundService
|
|||||||
|
|
||||||
private async Task Handle()
|
private async Task Handle()
|
||||||
{
|
{
|
||||||
var _spiderServices = StaticServiceProvider.Current.GetRequiredService<SpiderServices>();
|
try
|
||||||
var listRes = await _spiderServices.GetTaskList(3);
|
|
||||||
if (listRes.IsSuccess)
|
|
||||||
{
|
{
|
||||||
var needDispose = listRes.Result?.records;
|
var _spiderServices = StaticServiceProvider.Current.GetRequiredService<SpiderServices>();
|
||||||
//轮询列表,看有没有符合状态的进行处理
|
var listRes = await _spiderServices.GetTaskList(3);
|
||||||
if (needDispose?.Any() ?? false)
|
if (listRes.IsSuccess)
|
||||||
{
|
{
|
||||||
foreach (var item in needDispose)
|
var needDispose = listRes.Result?.records;
|
||||||
|
//轮询列表,看有没有符合状态的进行处理
|
||||||
|
if (needDispose?.Any() ?? false)
|
||||||
{
|
{
|
||||||
//2.结案操作
|
foreach (var item in needDispose)
|
||||||
var result = await _spiderServices.CloseFile(item.caseNumber, "",item.address);
|
|
||||||
if (result.IsSuccess)
|
|
||||||
{
|
{
|
||||||
var message = $"结案成功,任务编号:{item.caseNumber},任务地址:{item.address},任务类型:{item.typeCode}";
|
try
|
||||||
message.Info();
|
{
|
||||||
}
|
//2.结案操作
|
||||||
else
|
var result = await _spiderServices.CloseFile(item.caseNumber, "",item.address);
|
||||||
{
|
if (result.IsSuccess)
|
||||||
var message = $"结案失败,错误信息:{result.Message}";
|
{
|
||||||
message.Error();
|
var message = $"结案成功,任务编号:{item.caseNumber},任务地址:{item.address},任务类型:{item.typeCode}";
|
||||||
|
message.Info();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var message = $"结案失败,任务编号:{item.caseNumber},错误信息:{result.Message}";
|
||||||
|
message.Error();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception itemEx)
|
||||||
|
{
|
||||||
|
var itemErrorMessage = $"处理单个任务时发生异常\n" +
|
||||||
|
$"任务编号: {item.caseNumber}\n" +
|
||||||
|
$"任务地址: {item.address}\n" +
|
||||||
|
$"异常类型: {itemEx.GetType().Name}\n" +
|
||||||
|
$"异常消息: {itemEx.Message}\n" +
|
||||||
|
$"堆栈跟踪: {itemEx.StackTrace}\n" +
|
||||||
|
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
|
||||||
|
itemErrorMessage.Error();
|
||||||
|
_logger.LogError(itemEx, "处理任务 {CaseNumber} 时发生异常", item.caseNumber);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var warningMessage = $"获取任务列表失败: {listRes.Message}";
|
||||||
|
warningMessage.Error();
|
||||||
|
_logger.LogWarning("获取任务列表失败: {Message}", listRes.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception handleEx)
|
||||||
|
{
|
||||||
|
var handleErrorMessage = $"Handle方法执行发生异常\n" +
|
||||||
|
$"异常类型: {handleEx.GetType().Name}\n" +
|
||||||
|
$"异常消息: {handleEx.Message}\n" +
|
||||||
|
$"堆栈跟踪: {handleEx.StackTrace}\n" +
|
||||||
|
$"内部异常: {handleEx.InnerException?.Message}\n" +
|
||||||
|
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
|
||||||
|
handleErrorMessage.Error();
|
||||||
|
_logger.LogError(handleEx, "Handle方法执行发生异常");
|
||||||
|
throw; // 重新抛出异常,让外层catch处理
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -46,7 +46,7 @@ builder.Services.AddSwaggerGen();
|
|||||||
builder.Services.AddSingleton<IConfiguration>(config);
|
builder.Services.AddSingleton<IConfiguration>(config);
|
||||||
builder.Services.Configure<ClientOptions>(config.GetSection("ClientOptions"));
|
builder.Services.Configure<ClientOptions>(config.GetSection("ClientOptions"));
|
||||||
builder.Services.AddSingleton<HttpClientLogHandler>();
|
builder.Services.AddSingleton<HttpClientLogHandler>();
|
||||||
builder.Services.AddHttpClient("Default")
|
builder.Services.AddHttpClient("Default", client => { client.Timeout = TimeSpan.FromSeconds(30); })
|
||||||
.AddHttpMessageHandler<HttpClientLogHandler>();
|
.AddHttpMessageHandler<HttpClientLogHandler>();
|
||||||
builder.Services.AddMemoryCache();
|
builder.Services.AddMemoryCache();
|
||||||
builder.Services.AddLogging();
|
builder.Services.AddLogging();
|
||||||
|
|||||||
@ -42,43 +42,71 @@ public class SpiderServices
|
|||||||
|
|
||||||
public async Task<SpiderResponse<LoginResultData>> Login()
|
public async Task<SpiderResponse<LoginResultData>> Login()
|
||||||
{
|
{
|
||||||
using var scope = _serviceProvider.CreateScope();
|
try
|
||||||
using var client = _httpClientFactory.CreateClient("Default");
|
{
|
||||||
var getClientOptions = await scope.ServiceProvider.GetService<SettingServices>()?
|
using var scope = _serviceProvider.CreateScope();
|
||||||
.GetClientOptions();
|
using var client = _httpClientFactory.CreateClient("Default");
|
||||||
var loginApi = getClientOptions.LoginUrl;
|
var getClientOptions = await scope.ServiceProvider.GetService<SettingServices>()?
|
||||||
var json = $@"
|
.GetClientOptions();
|
||||||
|
var loginApi = getClientOptions.LoginUrl;
|
||||||
|
var json = $@"
|
||||||
{{""userName"":""{getClientOptions.UserName}"",""userPwd"":""{getClientOptions.Password}"",""type"":""account"",""clientAppId"":""megcity-web""}}
|
{{""userName"":""{getClientOptions.UserName}"",""userPwd"":""{getClientOptions.Password}"",""type"":""account"",""clientAppId"":""megcity-web""}}
|
||||||
";
|
";
|
||||||
client.DefaultRequestHeaders.Add("Module-Alias", "pending-forward");
|
client.DefaultRequestHeaders.Add("Module-Alias", "pending-forward");
|
||||||
client.DefaultRequestHeaders.Add("Module-Source", "megcity-web");
|
client.DefaultRequestHeaders.Add("Module-Source", "megcity-web");
|
||||||
client.DefaultRequestHeaders.Add("Origin", _optionsMonitor.CurrentValue.ApiGateway);
|
client.DefaultRequestHeaders.Add("Origin", _optionsMonitor.CurrentValue.ApiGateway);
|
||||||
var response = await client.PostAsync(loginApi, new StringContent(json, Encoding.UTF8, "application/json"));
|
var response = await client.PostAsync(loginApi, new StringContent(json, Encoding.UTF8, "application/json"));
|
||||||
var respJsonStr = await response.Content.ReadAsStringAsync();
|
var respJsonStr = await response.Content.ReadAsStringAsync();
|
||||||
_logger.LogInformation("登录返回: {tokenRes}", respJsonStr);
|
_logger.LogInformation("登录返回: {tokenRes}", respJsonStr);
|
||||||
var tokenRes = JsonSerializer.Deserialize<LoginResponse>(respJsonStr);
|
var tokenRes = JsonSerializer.Deserialize<LoginResponse>(respJsonStr);
|
||||||
if (response.IsSuccessStatusCode)
|
if (response.IsSuccessStatusCode)
|
||||||
{
|
|
||||||
if (tokenRes?.Code == 0)
|
|
||||||
{
|
{
|
||||||
_logger.LogInformation("成功登录, token: {token}", tokenRes?.Data?.Token);
|
if (tokenRes?.Code == 0)
|
||||||
return new SpiderResponse<LoginResultData>()
|
|
||||||
{
|
{
|
||||||
IsSuccess = true,
|
_logger.LogInformation("成功登录, token: {token}", tokenRes?.Data?.Token);
|
||||||
Result = tokenRes.Data,
|
return new SpiderResponse<LoginResultData>()
|
||||||
Code = SpiderResponseCode.Success,
|
{
|
||||||
Message = "成功登录"
|
IsSuccess = true,
|
||||||
};
|
Result = tokenRes.Data,
|
||||||
|
Code = SpiderResponseCode.Success,
|
||||||
|
Message = "成功登录"
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return new SpiderResponse<LoginResultData>()
|
var errorMessage = $"登录失败\n" +
|
||||||
|
$"响应状态码: {response.StatusCode}\n" +
|
||||||
|
$"响应内容: {respJsonStr}\n" +
|
||||||
|
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
|
||||||
|
_logger.LogWarning(errorMessage);
|
||||||
|
|
||||||
|
return new SpiderResponse<LoginResultData>()
|
||||||
|
{
|
||||||
|
IsSuccess = false,
|
||||||
|
Result = null,
|
||||||
|
Code = SpiderResponseCode.Fail,
|
||||||
|
Message = $"登录失败: {tokenRes?.Code.ToString() ?? "未知错误"}"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
IsSuccess = false,
|
var errorMessage = $"登录过程发生异常\n" +
|
||||||
Result = null,
|
$"异常类型: {ex.GetType().Name}\n" +
|
||||||
Code = SpiderResponseCode.Fail,
|
$"异常消息: {ex.Message}\n" +
|
||||||
Message = "登录失败"
|
$"堆栈跟踪: {ex.StackTrace}\n" +
|
||||||
};
|
$"内部异常: {ex.InnerException?.Message}\n" +
|
||||||
|
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
|
||||||
|
_logger.LogError(ex, "Login方法异常");
|
||||||
|
errorMessage.Error();
|
||||||
|
|
||||||
|
return new SpiderResponse<LoginResultData>()
|
||||||
|
{
|
||||||
|
IsSuccess = false,
|
||||||
|
Result = null,
|
||||||
|
Code = SpiderResponseCode.Fail,
|
||||||
|
Message = $"登录过程发生异常: {ex.Message}"
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<string?> GetToken()
|
public async Task<string?> GetToken()
|
||||||
@ -102,89 +130,130 @@ public class SpiderServices
|
|||||||
|
|
||||||
public async Task<SpiderResponse<QueryRespData>> GetTaskList(int state)
|
public async Task<SpiderResponse<QueryRespData>> GetTaskList(int state)
|
||||||
{
|
{
|
||||||
// "headers": {
|
try
|
||||||
// "accept": "application/json, text/plain, */*",
|
|
||||||
// "accept-language": "zh-CN,zh;q=0.9",
|
|
||||||
// "authorization": "WVPCDLzQeRWYySPkQMuLAislgqfQJuubaHmDnfgyRkSxNCpbwzTgOrvtjSeg",
|
|
||||||
// "client-app-id": "megcity-web",
|
|
||||||
// "content-type": "application/json;charset=UTF-8",
|
|
||||||
// "module-alias": "pending-forward",
|
|
||||||
// "module-source": "megcity-web"
|
|
||||||
// },
|
|
||||||
// "referrer": "http://33.10.72.100/megcity/",
|
|
||||||
// "referrerPolicy": "strict-origin-when-cross-origin",
|
|
||||||
var token = await GetToken();
|
|
||||||
using var client = _httpClientFactory.CreateClient("Default");
|
|
||||||
client.DefaultRequestHeaders.Add("authorization", $"{token}");
|
|
||||||
client.DefaultRequestHeaders.Add("accept-language", "zh-CN,zh;q=0.9");
|
|
||||||
client.DefaultRequestHeaders.Add("client-app-id", "megcity-web");
|
|
||||||
client.DefaultRequestHeaders.Add("module-alias", "pending-forward");
|
|
||||||
client.DefaultRequestHeaders.Add("module-source", "megcity-web");
|
|
||||||
// var beginTime = DateTime.Now.AddMonths(-1);
|
|
||||||
var startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
|
|
||||||
var beginTs = (long)(DateTime.Now.AddMonths(-1) - startTime).TotalMilliseconds;
|
|
||||||
var endTs = (long)(DateTime.Now - startTime).TotalMilliseconds;
|
|
||||||
var body = new QueryReq
|
|
||||||
{
|
{
|
||||||
State = [state],
|
// "headers": {
|
||||||
PageNo = 1,
|
// "accept": "application/json, text/plain, */*",
|
||||||
PageSize = 50,
|
// "accept-language": "zh-CN,zh;q=0.9",
|
||||||
};
|
// "authorization": "WVPCDLzQeRWYySPkQMuLAislgqfQJuubaHmDnfgyRkSxNCpbwzTgOrvtjSeg",
|
||||||
switch (state)
|
// "client-app-id": "megcity-web",
|
||||||
{
|
// "content-type": "application/json;charset=UTF-8",
|
||||||
case 1:
|
// "module-alias": "pending-forward",
|
||||||
body.SortType = [20, 10];
|
// "module-source": "megcity-web"
|
||||||
body.CreateStartTime = beginTs;
|
// },
|
||||||
body.CreateEndTime = endTs;
|
// "referrer": "http://33.10.72.100/megcity/",
|
||||||
break;
|
// "referrerPolicy": "strict-origin-when-cross-origin",
|
||||||
case 3:
|
var token = await GetToken();
|
||||||
body.SortType = [20, 10];
|
if (string.IsNullOrWhiteSpace(token))
|
||||||
body.HandleStartTime = beginTs;
|
|
||||||
body.HandleEndTime = endTs;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// {"state":[3],"pageNo":1,"pageSize":50,"sortType":[40,10],"handleStartTime":1762099200000,"handleEndTime":1762340979629}
|
|
||||||
// {"state":[3],"pageNo":1,"pageSize":50,"sortType":[40,10],"handleStartTime":1697293650750,"handleEndTime":1699885650750}
|
|
||||||
// {"state":[1],"pageNo":1,"pageSize":50,"sortType":[20,10],"createStartTime":1697290618034,"createEndTime":1699882618034}
|
|
||||||
// {\"state\":[1],\"pageNo\":1,\"pageSize\":50,\"sortType\":[20,10],\"createStartTime\":1697204639551,\"createEndTime\":1697204639551}
|
|
||||||
using var scope = _serviceProvider.CreateScope();
|
|
||||||
var getClientOptions = await scope.ServiceProvider.GetService<SettingServices>()?
|
|
||||||
.GetClientOptions();
|
|
||||||
var taskPath = getClientOptions.GetTaskUrl;
|
|
||||||
|
|
||||||
var response = await client.PostAsync(taskPath,
|
|
||||||
new StringContent(JsonSerializer.Serialize(body, new JsonSerializerOptions()
|
|
||||||
{
|
{
|
||||||
DefaultIgnoreCondition
|
|
||||||
= JsonIgnoreCondition.WhenWritingNull
|
|
||||||
}), Encoding.UTF8, "application/json"));
|
|
||||||
var respJsonStr = await response.Content.ReadAsStringAsync();
|
|
||||||
_logger.LogInformation("获得列表返回json: {respJsonStr}", respJsonStr);
|
|
||||||
var spiderRes = JsonSerializer.Deserialize<QueryResp>(respJsonStr);
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
if (spiderRes?.code == 0)
|
|
||||||
{
|
|
||||||
_logger.LogInformation("成功获取监控结果");
|
|
||||||
|
|
||||||
return new SpiderResponse<QueryRespData>()
|
return new SpiderResponse<QueryRespData>()
|
||||||
{
|
{
|
||||||
IsSuccess = true,
|
IsSuccess = false,
|
||||||
Result = spiderRes.data,
|
Result = null,
|
||||||
Code = SpiderResponseCode.Success,
|
Code = SpiderResponseCode.Fail,
|
||||||
Message = "成功获取监控结果"
|
Message = "无法获取访问令牌"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return new SpiderResponse<QueryRespData>()
|
using var client = _httpClientFactory.CreateClient("Default");
|
||||||
|
client.DefaultRequestHeaders.Add("authorization", $"{token}");
|
||||||
|
client.DefaultRequestHeaders.Add("accept-language", "zh-CN,zh;q=0.9");
|
||||||
|
client.DefaultRequestHeaders.Add("client-app-id", "megcity-web");
|
||||||
|
client.DefaultRequestHeaders.Add("module-alias", "pending-forward");
|
||||||
|
client.DefaultRequestHeaders.Add("module-source", "megcity-web");
|
||||||
|
// var beginTime = DateTime.Now.AddMonths(-1);
|
||||||
|
var startTime = DateTime.UnixEpoch;
|
||||||
|
var beginTs = (long)(DateTime.Now.AddMonths(-1) - startTime).TotalMilliseconds;
|
||||||
|
var endTs = (long)(DateTime.Now - startTime).TotalMilliseconds;
|
||||||
|
var body = new QueryReq
|
||||||
|
{
|
||||||
|
State = [state],
|
||||||
|
PageNo = 1,
|
||||||
|
PageSize = 50,
|
||||||
|
};
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
body.SortType = [20, 10];
|
||||||
|
body.CreateStartTime = beginTs;
|
||||||
|
body.CreateEndTime = endTs;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
body.SortType = [20, 10];
|
||||||
|
body.HandleStartTime = beginTs;
|
||||||
|
body.HandleEndTime = endTs;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// {"state":[3],"pageNo":1,"pageSize":50,"sortType":[40,10],"handleStartTime":1762099200000,"handleEndTime":1762340979629}
|
||||||
|
// {"state":[3],"pageNo":1,"pageSize":50,"sortType":[40,10],"handleStartTime":1697293650750,"handleEndTime":1699885650750}
|
||||||
|
// {"state":[1],"pageNo":1,"pageSize":50,"sortType":[20,10],"createStartTime":1697290618034,"createEndTime":1699882618034}
|
||||||
|
// {\"state\":[1],\"pageNo\":1,\"pageSize\":50,\"sortType\":[20,10],\"createStartTime\":1697204639551,\"createEndTime\":1697204639551}
|
||||||
|
using var scope = _serviceProvider.CreateScope();
|
||||||
|
var getClientOptions = await scope.ServiceProvider.GetService<SettingServices>()?
|
||||||
|
.GetClientOptions();
|
||||||
|
var taskPath = getClientOptions.GetTaskUrl;
|
||||||
|
|
||||||
|
var response = await client.PostAsync(taskPath,
|
||||||
|
new StringContent(JsonSerializer.Serialize(body, new JsonSerializerOptions()
|
||||||
|
{
|
||||||
|
DefaultIgnoreCondition
|
||||||
|
= JsonIgnoreCondition.WhenWritingNull
|
||||||
|
}), Encoding.UTF8, "application/json"));
|
||||||
|
var respJsonStr = await response.Content.ReadAsStringAsync();
|
||||||
|
_logger.LogInformation("获得列表返回json: {respJsonStr}", respJsonStr);
|
||||||
|
var spiderRes = JsonSerializer.Deserialize<QueryResp>(respJsonStr);
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
if (spiderRes?.code == 0)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("成功获取监控结果");
|
||||||
|
|
||||||
|
return new SpiderResponse<QueryRespData>()
|
||||||
|
{
|
||||||
|
IsSuccess = true,
|
||||||
|
Result = spiderRes.data,
|
||||||
|
Code = SpiderResponseCode.Success,
|
||||||
|
Message = "成功获取监控结果"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var errorMessage = $"获取监控结果失败\n" +
|
||||||
|
$"响应状态码: {response.StatusCode}\n" +
|
||||||
|
$"响应内容: {respJsonStr}\n" +
|
||||||
|
$"解析结果: {spiderRes?.code}\n" +
|
||||||
|
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
|
||||||
|
_logger.LogWarning(errorMessage);
|
||||||
|
|
||||||
|
return new SpiderResponse<QueryRespData>()
|
||||||
|
{
|
||||||
|
IsSuccess = false,
|
||||||
|
Result = null,
|
||||||
|
Code = SpiderResponseCode.Fail,
|
||||||
|
Message = $"获取监控结果失败: {spiderRes?.msg ?? "未知错误"}"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
IsSuccess = false,
|
var errorMessage = $"GetTaskList过程发生异常\n" +
|
||||||
Result = null,
|
$"参数state: {state}\n" +
|
||||||
Code = SpiderResponseCode.Fail,
|
$"异常类型: {ex.GetType().Name}\n" +
|
||||||
Message = "获取监控结果失败"
|
$"异常消息: {ex.Message}\n" +
|
||||||
};
|
$"堆栈跟踪: {ex.StackTrace}\n" +
|
||||||
|
$"内部异常: {ex.InnerException?.Message}\n" +
|
||||||
|
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
|
||||||
|
_logger.LogError(ex, "GetTaskList方法异常, state: {State}", state);
|
||||||
|
errorMessage.Error();
|
||||||
|
|
||||||
|
return new SpiderResponse<QueryRespData>()
|
||||||
|
{
|
||||||
|
IsSuccess = false,
|
||||||
|
Result = null,
|
||||||
|
Code = SpiderResponseCode.Fail,
|
||||||
|
Message = $"GetTaskList过程发生异常: {ex.Message}"
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user