调整生命周期的管理

This commit is contained in:
anlicheng 2026-05-05 16:50:41 +08:00
parent 385edf3c6c
commit b6a23226bc

View File

@ -161,25 +161,16 @@ actor SDLContextActor {
}
private func startSuperClient() async throws {
SDLLogger.log("[SDLContext] try start quicClient", for: .debug)
// monitor
let quicClient = SDLQUICClient(host: self.config.serverHost, port: 1443)
self.quicClient = quicClient
await quicClient.start()
defer {
Task {
await self.quicClient?.stop()
self.quicClient = nil
SDLLogger.log("[SDLContext] quicClient: stop")
}
}
// quic
try await Task.sleep(for: .seconds(0.5))
SDLLogger.log("[SDLContext] start quic client: \(self.config.serverHost)")
do {
try await withTaskCancellationHandler {
try await withThrowingTaskGroup { group in
defer {
@ -199,16 +190,20 @@ actor SDLContextActor {
try Task.checkCancellation()
await quicClient.send(type: .ping, data: Data())
}
SDLLogger.log("[SDLQUICClient] udp pingTask cancel", for: .debug)
}
try await group.next()
}
} onCancel: {
SDLLogger.log("[SDLQUICClient] quicClient taskGroup cancel", for: .debug)
Task {
await quicClient.stop()
}
}
} catch let err {
await quicClient.stop()
throw err
}
}
private func handleQUICMessage(message: SDLQUICInboundMessage) async {
@ -289,12 +284,7 @@ actor SDLContextActor {
let dnsClient = DNSCloudClient(host: self.config.serverHost, port: 15353)
self.dnsClient = dnsClient
dnsClient.start()
defer {
self.dnsClient = nil
dnsClient.stop()
}
do {
try await withTaskCancellationHandler {
for try await packet in dnsClient.packetFlow {
try Task.checkCancellation()
@ -305,6 +295,10 @@ actor SDLContextActor {
} onCancel: {
dnsClient.stop()
}
} catch let err {
dnsClient.stop()
throw err
}
}
private func startDnsLocalMonitor() {
@ -325,13 +319,7 @@ actor SDLContextActor {
SDLLogger.log("[SDLContext] dnsLocalClient started")
self.dnsLocalClient = dnsLocalClient
defer {
Task {
self.dnsLocalClient = nil
await dnsLocalClient.stop()
}
}
do {
try await withTaskCancellationHandler {
//
for try await packet in dnsLocalClient.packetFlow {
@ -345,6 +333,10 @@ actor SDLContextActor {
await dnsLocalClient.stop()
}
}
} catch let err {
await dnsLocalClient.stop()
throw err
}
}
private func startUDPHoleMonitor() {