Browse Source

更新代码:完善网络配置和协议客户端功能

feature/protocol-log-Perfect
root 1 day ago
parent
commit
d011b25cf3
  1. 191
      CoreAgent.Infrastructure/Services/Network/GeneralCellularNetworkService.cs
  2. 2
      CoreAgent.ProtocolClient/ProtocolEngineCore/ProtocolLogProcessor.cs
  3. 272
      modify.md

191
CoreAgent.Infrastructure/Services/Network/GeneralCellularNetworkService.cs

@ -174,13 +174,14 @@ namespace CoreAgent.Infrastructure.Services.Network
private async Task<CellularNetworkOperationResult> StartNetworkAsync(CellularNetworkConfiguration cellular)
{
string key =cellular.RuntimeCode;
string key = cellular.RuntimeCode;
var startTime = DateTime.UtcNow;
_logger.LogInformation("开始启动网络配置 {ConfigKey},开始时间: {StartTime}", key, startTime.ToString("yyyy-MM-dd HH:mm:ss.fff"));
// 1. 获取并验证网络配置
// 步骤1: 创建蜂窝网络配置文件
// 根据传入的蜂窝网络配置和应用程序设置,创建临时配置文件
var step1Start = DateTime.UtcNow;
_logger.LogDebug("步骤1开始:获取并验证网络配置");
_logger.LogDebug("步骤1开始:创建蜂窝网络配置文件");
var (isSuccess, errorMsg, config) = await _configCopier.CreateCellularNetworkConfigurationFile(cellular, _context.GetAppSettings());
if (!isSuccess)
@ -191,9 +192,37 @@ namespace CoreAgent.Infrastructure.Services.Network
}
var step1Duration = (DateTime.UtcNow - step1Start).TotalMilliseconds;
_logger.LogDebug("步骤1完成:获取并验证网络配置,耗时: {Duration}ms", step1Duration.ToString("F2"));
_logger.LogDebug("步骤1完成:创建蜂窝网络配置文件,耗时: {Duration}ms", step1Duration.ToString("F2"));
// 2. 执行网络接口初始化命令
// 只有步骤1成功才继续执行后续步骤
var result = await ExecuteRemainingStepsAsync(config, key, startTime);
// 删除临时配置文件 - 无论成功还是失败都需要执行
var deleteResult = _configCopier.DeleteCellularNetworkConfigurationFile(config);
if (!deleteResult.IsSuccess)
{
_logger.LogWarning("删除临时配置文件失败: {ErrorMessage}", deleteResult.ErrorMessage);
// 不返回失败,因为网络启动流程已经完成
}
else
{
_logger.LogInformation("临时配置文件删除成功");
}
return result;
}
/// <summary>
/// 执行剩余的启动步骤(步骤2-12)
/// </summary>
/// <param name="config">网络配置</param>
/// <param name="key">配置键</param>
/// <param name="startTime">开始时间</param>
/// <returns>执行结果</returns>
private async Task<CellularNetworkOperationResult> ExecuteRemainingStepsAsync(NetworkConfiguration config, string key, DateTime startTime)
{
// 步骤2: 执行网络接口初始化命令
// 初始化网络接口,确保网络环境准备就绪
var step2Start = DateTime.UtcNow;
_logger.LogDebug("步骤2开始:执行网络接口初始化命令");
@ -206,7 +235,8 @@ namespace CoreAgent.Infrastructure.Services.Network
var step2Duration = (DateTime.UtcNow - step2Start).TotalMilliseconds;
_logger.LogDebug("步骤2完成:执行网络接口初始化命令,耗时: {Duration}ms", step2Duration.ToString("F2"));
// 3. 复制配置值到临时目录
// 步骤3: 复制配置值到临时目录
// 将网络配置的关键参数复制到系统临时目录,供后续步骤使用
var step3Start = DateTime.UtcNow;
_logger.LogDebug("步骤3开始:复制配置值到临时目录");
@ -221,31 +251,34 @@ namespace CoreAgent.Infrastructure.Services.Network
var step3Duration = (DateTime.UtcNow - step3Start).TotalMilliseconds;
_logger.LogDebug("步骤3完成:复制配置值到临时目录,耗时: {Duration}ms", step3Duration.ToString("F2"));
// 4. 获取并验证 IP 端点信息
// 步骤4: 获取并验证IP端点信息
// 从配置中提取通信地址信息,验证端点的有效性
var step4Start = DateTime.UtcNow;
_logger.LogDebug("步骤4开始:获取并验证 IP 端点信息");
_logger.LogDebug("步骤4开始:获取并验证IP端点信息");
var (endPoints, hasAnyEndPoint) = await _configCopier.GetComAddrInfoAsync(config);
if (!hasAnyEndPoint)
{
var message = "未获取到任何有效的 IP 端点信息";
var message = "未获取到任何有效的IP端点信息";
_logger.LogError(message);
return CellularNetworkOperationResult.Failure(message);
}
var step4Duration = (DateTime.UtcNow - step4Start).TotalMilliseconds;
_logger.LogDebug("步骤4完成:获取并验证 IP 端点信息,耗时: {Duration}ms", step4Duration.ToString("F2"));
_logger.LogDebug("步骤4完成:获取并验证IP端点信息,耗时: {Duration}ms", step4Duration.ToString("F2"));
// 5. 更新 IP 端点管理器
// 步骤5: 更新IP端点管理器
// 将获取到的端点信息更新到网络上下文中的端点管理器
var step5Start = DateTime.UtcNow;
_logger.LogDebug("步骤5开始:更新 IP 端点管理器");
_logger.LogDebug("步骤5开始:更新IP端点管理器");
_context.NetworkIPEndPointManager.UpdateEndPoints(endPoints);
var step5Duration = (DateTime.UtcNow - step5Start).TotalMilliseconds;
_logger.LogDebug("步骤5完成:更新 IP 端点管理器,耗时: {Duration}ms", step5Duration.ToString("F2"));
_logger.LogDebug("步骤5完成:更新IP端点管理器,耗时: {Duration}ms", step5Duration.ToString("F2"));
// 6. 创建协议客户端配置
// 步骤6: 创建协议客户端配置
// 基于网络实体信息创建协议客户端配置,为后续的协议通信做准备
var step6Start = DateTime.UtcNow;
_logger.LogDebug("步骤6开始:创建协议客户端配置");
@ -264,22 +297,24 @@ namespace CoreAgent.Infrastructure.Services.Network
var step6Duration = (DateTime.UtcNow - step6Start).TotalMilliseconds;
_logger.LogDebug("步骤6完成:创建协议客户端配置,耗时: {Duration}ms", step6Duration.ToString("F2"));
// 7. 启动 WebSocket 传输连接
// 步骤7: 启动WebSocket传输连接
// 建立与协议服务器的WebSocket连接,为数据传输做准备
var step7Start = DateTime.UtcNow;
_logger.LogDebug("步骤7开始:启动 WebSocket 传输连接");
_logger.LogDebug("步骤7开始:启动WebSocket传输连接");
var webSocketConnected = await StartWebSocketTransportAsync();
if (!webSocketConnected)
{
_logger.LogError("WebSocket 传输连接启动失败,服务端可能未启动");
return CellularNetworkOperationResult.Failure("WebSocket 传输连接启动失败,服务端可能未启动");
_logger.LogError("WebSocket传输连接启动失败,服务端可能未启动");
return CellularNetworkOperationResult.Failure("WebSocket传输连接启动失败,服务端可能未启动");
}
_logger.LogInformation("WebSocket 传输连接启动成功");
_logger.LogInformation("WebSocket传输连接启动成功");
var step7Duration = (DateTime.UtcNow - step7Start).TotalMilliseconds;
_logger.LogDebug("步骤7完成:启动 WebSocket 传输连接,耗时: {Duration}ms", step7Duration.ToString("F2"));
_logger.LogDebug("步骤7完成:启动WebSocket传输连接,耗时: {Duration}ms", step7Duration.ToString("F2"));
// 8. 启动网络配置
// 步骤8: 启动网络配置
// 启用网络接口配置,激活蜂窝网络连接
var step8Start = DateTime.UtcNow;
_logger.LogDebug("步骤8开始:启动网络配置");
_logger.LogInformation("正在启动蜂窝网络配置: {ConfigKey}", key);
@ -295,7 +330,8 @@ namespace CoreAgent.Infrastructure.Services.Network
var step8Duration = (DateTime.UtcNow - step8Start).TotalMilliseconds;
_logger.LogDebug("步骤8完成:启动网络配置,耗时: {Duration}ms", step8Duration.ToString("F2"));
// 9. 更新网络配置类型
// 步骤9: 更新网络配置类型
// 根据启动结果更新网络配置类型,记录当前使用的配置类型
var step9Start = DateTime.UtcNow;
_logger.LogDebug("步骤9开始:更新网络配置类型");
@ -305,7 +341,8 @@ namespace CoreAgent.Infrastructure.Services.Network
var step9Duration = (DateTime.UtcNow - step9Start).TotalMilliseconds;
_logger.LogDebug("步骤9完成:更新网络配置类型,耗时: {Duration}ms", step9Duration.ToString("F2"));
// 10. 检查网络端点连接状态
// 步骤10: 检查网络端点连接状态
// 验证所有网络端点的连接状态,确保网络连接正常
var step10Start = DateTime.UtcNow;
_logger.LogDebug("步骤10开始:检查网络端点连接状态");
_logger.LogInformation("开始检查所有网络端点的连接状态");
@ -315,6 +352,7 @@ namespace CoreAgent.Infrastructure.Services.Network
{
var errorMessage = string.Join("; ", statusCheckResult.ErrorMessage);
_logger.LogWarning("网络端点状态检查未通过: {ErrorMessage}", errorMessage);
await RestoreNetworkStateAsync();
return CellularNetworkOperationResult.Failure($"网络端点状态检查失败: {errorMessage}");
}
_logger.LogInformation("网络端点状态检查完成,所有端点状态正常");
@ -322,7 +360,8 @@ namespace CoreAgent.Infrastructure.Services.Network
var step10Duration = (DateTime.UtcNow - step10Start).TotalMilliseconds;
_logger.LogDebug("步骤10完成:检查网络端点连接状态,耗时: {Duration}ms", step10Duration.ToString("F2"));
// 11. 更新网络状态
// 步骤11: 更新网络状态
// 将网络状态标记为已启动,更新内部状态管理
var step11Start = DateTime.UtcNow;
_logger.LogDebug("步骤11开始:更新网络状态");
@ -332,20 +371,15 @@ namespace CoreAgent.Infrastructure.Services.Network
var step11Duration = (DateTime.UtcNow - step11Start).TotalMilliseconds;
_logger.LogDebug("步骤11完成:更新网络状态,耗时: {Duration}ms", step11Duration.ToString("F2"));
// 12. 启动所有协议客户端
// 步骤12: 启动所有协议客户端
// 启动所有协议客户端,开始协议数据采集和传输
var step12Start = DateTime.UtcNow;
_logger.LogDebug("步骤12开始:启动所有协议客户端");
try
var result = await StartAllProtocolClientsAsync(protocolConfigFactory);
if (!result.IsSuccess)
{
var protocolConfigs = protocolConfigFactory.GetAllConfigs();
_protocolWsClientManager.StartAllClients(protocolConfigs);
_logger.LogInformation("所有协议客户端启动完成");
}
catch (Exception ex)
{
_logger.LogError(ex, "启动协议客户端失败");
return CellularNetworkOperationResult.Failure($"启动协议客户端失败: {ex.Message}");
return result;
}
var step12Duration = (DateTime.UtcNow - step12Start).TotalMilliseconds;
@ -355,18 +389,6 @@ namespace CoreAgent.Infrastructure.Services.Network
var duration = endTime - startTime;
_logger.LogInformation("蜂窝网络配置 {ConfigKey} 启动成功,当前状态: {Status},总耗时: {Duration}ms",
key, state.CurrentStatus, duration.TotalMilliseconds.ToString("F2"));
// 删除临时配置文件
var deleteResult = _configCopier.DeleteCellularNetworkConfigurationFile(config);
if (!deleteResult.IsSuccess)
{
_logger.LogWarning("删除临时配置文件失败: {ErrorMessage}", deleteResult.ErrorMessage);
// 不返回失败,因为网络已经启动成功
}
else
{
_logger.LogInformation("临时配置文件删除成功");
}
return CellularNetworkOperationResult.Success(state.CurrentStatus);
}
@ -390,5 +412,82 @@ namespace CoreAgent.Infrastructure.Services.Network
}
}
/// <summary>
/// 恢复网络状态
/// 在网络启动过程中出现错误时,尝试恢复到初始状态
/// </summary>
private async Task RestoreNetworkStateAsync()
{
try
{
_logger.LogInformation("开始恢复网络状态");
// 1. 关闭WebSocket传输连接
try
{
if (_webSocketTransport.IsConnected)
{
await _webSocketTransport.CloseAsync();
_logger.LogDebug("WebSocket传输连接关闭完成");
}
}
catch (Exception ex)
{
_logger.LogWarning(ex, "关闭WebSocket传输连接时出现异常,继续执行恢复流程");
}
// 2. 执行网络接口初始化命令,重置网络状态
try
{
var initResult = await _interfaceManager.ExecuteInitializeCommandsAsync(true);
if (!initResult.IsSuccess)
{
_logger.LogWarning("执行网络接口初始化命令失败: {ErrorMessage}", initResult.ErrorMessage);
}
else
{
_logger.LogDebug("网络接口初始化命令执行成功");
}
}
catch (Exception ex)
{
_logger.LogWarning(ex, "执行网络接口初始化命令时出现异常");
}
}
catch (Exception ex)
{
_logger.LogError(ex, "恢复网络状态过程中出现未预期的异常");
}
}
/// <summary>
/// 启动所有协议客户端
/// </summary>
/// <param name="protocolConfigFactory">协议配置工厂</param>
/// <returns>启动结果</returns>
private async Task<CellularNetworkOperationResult> StartAllProtocolClientsAsync(ProtocolClientConfigFactory protocolConfigFactory)
{
try
{
var protocolConfigs = protocolConfigFactory.GetAllConfigs();
var startResult = _protocolWsClientManager.StartAllClients(protocolConfigs);
if (!startResult)
{
_logger.LogWarning("部分协议客户端启动失败");
await RestoreNetworkStateAsync();
return CellularNetworkOperationResult.Failure("部分协议客户端启动失败");
}
_logger.LogInformation("所有协议客户端启动完成");
return CellularNetworkOperationResult.Success(NetworkStatus.Connected);
}
catch (Exception ex)
{
_logger.LogError(ex, "启动协议客户端失败");
await RestoreNetworkStateAsync();
return CellularNetworkOperationResult.Failure($"启动协议客户端失败: {ex.Message}");
}
}
}
}

2
CoreAgent.ProtocolClient/ProtocolEngineCore/ProtocolLogProcessor.cs

@ -45,7 +45,7 @@ namespace CoreAgent.ProtocolClient.ProtocolEngineCore
_logDetailProcessor = new LogDetailProcessor(_context, logger);
_contextParser = new ProtocolContextParser(context);
_messageHandler = new LogMessageHandler(config, context, logger, messageManager);
_dataConverter = new LogDataConverter(context, logger);
_dataConverter = new LogDataConverter(context, config, logger);
_protocolLogObserver = protocolLogObserver ?? throw new ArgumentNullException(nameof(protocolLogObserver));
// 订阅日志接收事件

272
modify.md

@ -1543,4 +1543,274 @@
- 协议日志处理的完整性
- 日志输出的完整性
- 协议日志观察者接收的数据质量
- 调试和问题排查能力
- 调试和问题排查能力
### GeneralCellularNetworkService.StartNetworkAsync方法步骤注释优化
**修改时间**: 2024年12月
**修改文件**:
- `CoreAgent.Infrastructure/Services/Network/GeneralCellularNetworkService.cs`
**修改内容**:
1. **重新注释StartNetworkAsync方法中的步骤**
- 为每个步骤添加更详细和清晰的注释说明
- 统一注释格式,使用"步骤X: 功能描述"的格式
- 为每个步骤添加功能说明,解释该步骤的具体作用
- 保持原有的时间跟踪和日志记录功能
2. **具体修改的步骤注释**:
- **步骤1**: 创建蜂窝网络配置文件 - 根据传入的蜂窝网络配置和应用程序设置,创建临时配置文件
- **步骤2**: 执行网络接口初始化命令 - 初始化网络接口,确保网络环境准备就绪
- **步骤3**: 复制配置值到临时目录 - 将网络配置的关键参数复制到系统临时目录,供后续步骤使用
- **步骤4**: 获取并验证IP端点信息 - 从配置中提取通信地址信息,验证端点的有效性
- **步骤5**: 更新IP端点管理器 - 将获取到的端点信息更新到网络上下文中的端点管理器
- **步骤6**: 创建协议客户端配置 - 基于网络实体信息创建协议客户端配置,为后续的协议通信做准备
- **步骤7**: 启动WebSocket传输连接 - 建立与协议服务器的WebSocket连接,为数据传输做准备
- **步骤8**: 启动网络配置 - 启用网络接口配置,激活蜂窝网络连接
- **步骤9**: 更新网络配置类型 - 根据启动结果更新网络配置类型,记录当前使用的配置类型
- **步骤10**: 检查网络端点连接状态 - 验证所有网络端点的连接状态,确保网络连接正常
- **步骤11**: 更新网络状态 - 将网络状态标记为已启动,更新内部状态管理
- **步骤12**: 启动所有协议客户端 - 启动所有协议客户端,开始协议数据采集和传输
3. **设计优势**:
- **注释清晰**:每个步骤都有明确的功能描述
- **格式统一**:使用一致的注释格式,提高可读性
- **功能说明**:详细解释每个步骤的作用和目的
- **易于理解**:帮助开发者快速理解网络启动流程
- **维护友好**:清晰的注释便于后续维护和修改
4. **注释示例**:
```csharp
// 步骤1: 创建蜂窝网络配置文件
// 根据传入的蜂窝网络配置和应用程序设置,创建临时配置文件
var step1Start = DateTime.UtcNow;
_logger.LogDebug("步骤1开始:创建蜂窝网络配置文件");
// 步骤2: 执行网络接口初始化命令
// 初始化网络接口,确保网络环境准备就绪
var step2Start = DateTime.UtcNow;
_logger.LogDebug("步骤2开始:执行网络接口初始化命令");
```
**影响范围**:
- 网络启动流程的代码可读性
- 开发者对网络启动过程的理解
- 代码维护和调试的便利性
- 新团队成员的学习成本
### GeneralCellularNetworkService网络状态恢复机制优化
**修改时间**: 2024年12月
**修改文件**:
- `CoreAgent.Infrastructure/Services/Network/GeneralCellularNetworkService.cs`
**修改内容**:
1. **重新命名和优化恢复方法**
- 将 `StartRestore` 方法重命名为 `RestoreNetworkStateAsync`
- 添加完整的XML文档注释说明方法用途
- 返回 `bool` 类型表示恢复操作是否成功
- 移除直接抛出异常的代码,改为记录日志并返回失败状态
2. **完善恢复流程**
- **步骤1**: 停止所有协议客户端
- **步骤2**: 关闭WebSocket传输连接
- **步骤3**: 执行网络接口初始化命令,重置网络状态
- **步骤4**: 重置网络上下文状态
- 每个步骤都有独立的异常处理,确保单个步骤失败不影响其他步骤
3. **在步骤10之后的所有步骤中添加恢复机制**
- **步骤10**: 网络端点状态检查失败时调用恢复
- **步骤11**: 更新网络状态失败时调用恢复
- **步骤12**: 启动协议客户端失败时调用恢复
- 确保在任何步骤失败时都能正确清理资源
4. **具体实现**:
```csharp
// 恢复方法优化
private async Task<bool> RestoreNetworkStateAsync()
{
try
{
_logger.LogInformation("开始恢复网络状态");
// 1. 停止所有协议客户端
try
{
_protocolWsClientManager.StopAllClients();
_logger.LogDebug("协议客户端停止完成");
}
catch (Exception ex)
{
_logger.LogWarning(ex, "停止协议客户端时出现异常,继续执行恢复流程");
}
// 2. 关闭WebSocket传输连接
try
{
if (_webSocketTransport.IsConnected)
{
await _webSocketTransport.CloseAsync();
_logger.LogDebug("WebSocket传输连接关闭完成");
}
}
catch (Exception ex)
{
_logger.LogWarning(ex, "关闭WebSocket传输连接时出现异常,继续执行恢复流程");
}
// 3. 执行网络接口初始化命令,重置网络状态
try
{
var initResult = await _interfaceManager.ExecuteInitializeCommandsAsync(true);
if (!initResult.IsSuccess)
{
_logger.LogWarning("执行网络接口初始化命令失败: {ErrorMessage}", initResult.ErrorMessage);
}
else
{
_logger.LogDebug("网络接口初始化命令执行成功");
}
}
catch (Exception ex)
{
_logger.LogWarning(ex, "执行网络接口初始化命令时出现异常");
}
// 4. 重置网络上下文状态
_context.Reset();
_logger.LogDebug("网络上下文状态重置完成");
_logger.LogInformation("网络状态恢复完成");
return true;
}
catch (Exception ex)
{
_logger.LogError(ex, "恢复网络状态过程中出现未预期的异常");
return false;
}
}
```
5. **步骤10-12的恢复调用**:
```csharp
// 步骤10: 网络端点状态检查失败
if (!statusCheckResult.IsSuccess)
{
var errorMessage = string.Join("; ", statusCheckResult.ErrorMessage);
_logger.LogWarning("网络端点状态检查未通过: {ErrorMessage}", errorMessage);
await RestoreNetworkStateAsync();
return CellularNetworkOperationResult.Failure($"网络端点状态检查失败: {errorMessage}");
}
// 步骤11: 更新网络状态
var state = _context.GetNetworkState();
state.MarkAsStarted();
// 步骤12: 启动协议客户端失败
try
{
var protocolConfigs = protocolConfigFactory.GetAllConfigs();
var startResult = _protocolWsClientManager.StartAllClients(protocolConfigs);
if (!startResult)
{
_logger.LogWarning("部分协议客户端启动失败");
await RestoreNetworkStateAsync();
return CellularNetworkOperationResult.Failure("部分协议客户端启动失败");
}
_logger.LogInformation("所有协议客户端启动完成");
}
catch (Exception ex)
{
_logger.LogError(ex, "启动协议客户端失败");
await RestoreNetworkStateAsync();
return CellularNetworkOperationResult.Failure($"启动协议客户端失败: {ex.Message}");
}
```
6. **设计优势**:
- **完整的资源清理**:确保所有已创建的资源都被正确清理
- **错误隔离**:每个恢复步骤都有独立的异常处理,避免单个失败影响整体恢复
- **详细日志记录**:提供完整的恢复过程日志,便于问题排查
- **状态一致性**:确保网络状态在失败时能够恢复到初始状态
- **方法命名清晰**:`RestoreNetworkStateAsync` 明确表达方法功能
- **返回值有意义**:返回bool值表示恢复操作是否成功
- **异常处理完善**:不直接抛出异常,而是记录日志并返回失败状态
**影响范围**:
- 网络启动失败时的资源清理机制
- 网络状态恢复的可靠性
- 错误处理和日志记录的完整性
- 系统稳定性和资源管理
- 调试和问题排查能力
### 优化GeneralCellularNetworkService中的RestoreNetworkStateAsync方法和启动流程
**修改时间**: 2024年12月
**修改文件**:
- `CoreAgent.Infrastructure/Services/Network/GeneralCellularNetworkService.cs`
**修改内容**:
1. **问题描述**:
- `RestoreNetworkStateAsync` 方法返回布尔值但调用方不做判断,返回值无意义
- 步骤12(启动所有协议客户端)代码较长,需要提取为单独方法以提高可读性
- 需要确保只有步骤1成功时才继续执行后续步骤
- 删除临时配置文件这一步无论成功还是失败都需要执行
2. **修复方案**:
- 将 `RestoreNetworkStateAsync` 方法改为 `void` 返回类型,移除不必要的返回值
- 提取步骤12的协议客户端启动逻辑到单独的私有方法 `StartAllProtocolClientsAsync`
- 重构 `StartNetworkAsync` 方法,将步骤1和删除临时配置文件分离
- 提取步骤2-12到新的私有方法 `ExecuteRemainingStepsAsync`
- 确保删除临时配置文件无论成功还是失败都会执行
3. **具体修改**:
**RestoreNetworkStateAsync 方法优化**:
```csharp
// 修改前
private async Task<bool> RestoreNetworkStateAsync()
// 修改后
private async Task RestoreNetworkStateAsync()
```
**新增 StartAllProtocolClientsAsync 方法**:
```csharp
/// <summary>
/// 启动所有协议客户端
/// </summary>
/// <param name="protocolConfigFactory">协议配置工厂</param>
/// <returns>启动结果</returns>
private async Task<CellularNetworkOperationResult> StartAllProtocolClientsAsync(ProtocolClientConfigFactory protocolConfigFactory)
```
**新增 ExecuteRemainingStepsAsync 方法**:
```csharp
/// <summary>
/// 执行剩余的启动步骤(步骤2-12)
/// </summary>
/// <param name="config">网络配置</param>
/// <param name="key">配置键</param>
/// <param name="startTime">开始时间</param>
/// <returns>执行结果</returns>
private async Task<CellularNetworkOperationResult> ExecuteRemainingStepsAsync(object config, string key, DateTime startTime)
```
**StartNetworkAsync 方法重构**:
```csharp
// 步骤1成功后,调用ExecuteRemainingStepsAsync执行后续步骤
var result = await ExecuteRemainingStepsAsync(config, key, startTime);
// 删除临时配置文件 - 无论成功还是失败都需要执行
var deleteResult = _configCopier.DeleteCellularNetworkConfigurationFile(config);
// 记录结果但不影响返回值
```
4. **影响范围**:
- 简化了方法调用,移除了不必要的返回值判断
- 提高了代码可读性和维护性
- 确保了步骤1的成功验证逻辑
- 保证了临时配置文件的清理操作总是执行
- 保持了原有的错误处理逻辑
Loading…
Cancel
Save