diff --git a/Sources/Punchnet/SDLContext.swift b/Sources/Punchnet/SDLContext.swift index cc9fe7e..66d3bda 100644 --- a/Sources/Punchnet/SDLContext.swift +++ b/Sources/Punchnet/SDLContext.swift @@ -113,6 +113,7 @@ public class SDLContext: @unchecked Sendable { try await self.startUDPHole() } catch let err { self.logger.log("[SDLContext] UDPHole get err: \(err)", level: .warning) + try await Task.sleep(for: .seconds(2)) } } } @@ -139,6 +140,7 @@ public class SDLContext: @unchecked Sendable { try await self.startNoticeClient() } catch let err { self.logger.log("[SDLContext] noticeClient get err: \(err)", level: .warning) + try await Task.sleep(for: .seconds(2)) } } } @@ -168,6 +170,10 @@ public class SDLContext: @unchecked Sendable { private func startUDPHole() async throws { self.udpHole = try await SDLUDPHole(logger: self.logger) try await withThrowingTaskGroup(of: Void.self) { group in + defer { + self.logger.log("[SDLContext] udp_hole task cancel", level: .warning) + } + group.addTask { try await self.udpHole?.start() } @@ -187,7 +193,6 @@ public class SDLContext: @unchecked Sendable { } } try await group.waitForAll() - self.logger.log("[SDLContext] udp_hole task cancel", level: .warning) } } @@ -195,6 +200,10 @@ public class SDLContext: @unchecked Sendable { private func startSuperClient() async throws { self.superClient = try await SDLSuperClient(host: self.config.superHost, port: self.config.superPort, logger: self.logger) try await withThrowingTaskGroup(of: Void.self) { group in + defer { + self.logger.log("[SDLContext] super client task cancel", level: .warning) + } + group.addTask { try await self.superClient?.start() } @@ -207,7 +216,6 @@ public class SDLContext: @unchecked Sendable { } } try await group.waitForAll() - self.logger.log("[SDLContext] super client task cancel", level: .warning) } } @@ -467,10 +475,6 @@ public class SDLContext: @unchecked Sendable { // 开启新的任务 self.readTask = Task(priority: .high) { repeat { - if Task.isCancelled { - break - } - let (packets, numbers) = await self.provider.packetFlow.readPackets() for (data, number) in zip(packets, numbers) where number == 2 { if let packet = IPPacket(data) {