From 7a4c3e77c2de30b93b14b2ca401cef7d0c2ae02f Mon Sep 17 00:00:00 2001 From: root <295172551@qq.com> Date: Sat, 14 Jun 2025 21:18:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E8=9C=82=E7=AA=9D?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E5=90=AF=E5=8A=A8=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0IsInitialized=E5=B1=9E=E6=80=A7=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E5=88=9D=E5=A7=8B=E5=8C=96=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contexts/CellularNetworkContext.cs | 5 ++++ .../Network/ICellularNetworkContext.cs | 5 ++++ .../Network/CellularNetworkService.cs | 24 +++++++++++++++---- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/CoreAgent.Domain/Contexts/CellularNetworkContext.cs b/CoreAgent.Domain/Contexts/CellularNetworkContext.cs index 5a53d16..2dc67c4 100644 --- a/CoreAgent.Domain/Contexts/CellularNetworkContext.cs +++ b/CoreAgent.Domain/Contexts/CellularNetworkContext.cs @@ -24,6 +24,11 @@ public class CellularNetworkContext : ICellularNetworkContext, IDisposable /// public CancellationTokenSource TokenSource => _token; + /// + /// 是否已初始化 + /// + public bool IsInitialized => _isInitialized; + public CellularNetworkContext( IOptions networkCommandConfig, IOptions appSettings) diff --git a/CoreAgent.Domain/Interfaces/Network/ICellularNetworkContext.cs b/CoreAgent.Domain/Interfaces/Network/ICellularNetworkContext.cs index c33dbdc..333121a 100644 --- a/CoreAgent.Domain/Interfaces/Network/ICellularNetworkContext.cs +++ b/CoreAgent.Domain/Interfaces/Network/ICellularNetworkContext.cs @@ -13,6 +13,11 @@ public interface ICellularNetworkContext /// CancellationTokenSource TokenSource { get; } + /// + /// 是否已初始化 + /// + bool IsInitialized { get; } + /// /// 初始化上下文 /// diff --git a/CoreAgent.Infrastructure/Services/Network/CellularNetworkService.cs b/CoreAgent.Infrastructure/Services/Network/CellularNetworkService.cs index 3790c15..8996b9a 100644 --- a/CoreAgent.Infrastructure/Services/Network/CellularNetworkService.cs +++ b/CoreAgent.Infrastructure/Services/Network/CellularNetworkService.cs @@ -40,8 +40,14 @@ public class CellularNetworkService : ICellularNetworkService _context = context ?? throw new ArgumentNullException(nameof(context)); } + /// + /// 启动蜂窝网络 + /// + /// 网络配置键 + /// 启动结果 public async Task StartAsync(string key) { + // 1. 参数验证 if (string.IsNullOrEmpty(key)) { _logger.LogError("启动蜂窝网络失败:配置键为空"); @@ -50,21 +56,29 @@ public class CellularNetworkService : ICellularNetworkService try { + // 2. 获取启动锁,防止并发启动 if (!await _startLock.WaitAsync(TimeSpan.FromSeconds(LockTimeoutSeconds))) { _logger.LogWarning("蜂窝网络启动操作被锁定,可能已有其他启动操作正在进行"); return CellularNetworkOperationResult.Failure("蜂窝网络启动操作被锁定,可能已有其他启动操作正在进行"); } - // 检查网络状态 - var stateCheckResult = CheckNetworkState(key); - if (!stateCheckResult.IsSuccess) + // 3. 状态检查 + // 如果是第二次启动(已初始化),需要先检查网络状态 + if (_context.IsInitialized) { - return stateCheckResult; + // 检查网络状态,确保没有冲突的配置 + var stateCheckResult = CheckNetworkState(key); + if (!stateCheckResult.IsSuccess) + { + return stateCheckResult; + } } - // 初始化网络上下文 + // 4. 初始化网络上下文 _context.Initialize(key); + + // 5. 启动网络 var result = await StartNetworkAsync(key); if (!result.IsSuccess) {