@@ -12,6 +12,8 @@ import XPCShared
1212
1313@ServiceActor
1414var workspaces = [ URL: Workspace] ( )
15+ @ServiceActor
16+ var inflightRealtimeSuggestionsTasks = Set < Task < Void , Never > > ( )
1517
1618public class XPCService : NSObject , XPCServiceProtocol {
1719 public func getXPCServiceVersion( withReply reply: @escaping ( String , String ) -> Void ) {
@@ -87,6 +89,7 @@ public class XPCService: NSObject, XPCServiceProtocol {
8789 ) {
8890 Task { @ServiceActor in
8991 do {
92+ throw CancellationError ( )
9093 let editor = try JSONDecoder ( ) . decode ( EditorContent . self, from: editorContent)
9194 let fileURL = try await Environment . fetchCurrentFileURL ( )
9295 let workspace = try await fetchOrCreateWorkspaceIfNeeded ( fileURL: fileURL)
@@ -220,11 +223,14 @@ public class XPCService: NSObject, XPCServiceProtocol {
220223 editorContent: Data ,
221224 withReply reply: @escaping ( Data ? , Error ? ) -> Void
222225 ) {
223- Task { @ServiceActor in
226+ let task = Task { @ServiceActor in
224227 do {
225228 let editor = try JSONDecoder ( ) . decode ( EditorContent . self, from: editorContent)
229+ try Task . checkCancellation ( )
226230 let fileURL = try await Environment . fetchCurrentFileURL ( )
231+ try Task . checkCancellation ( )
227232 let workspace = try await fetchOrCreateWorkspaceIfNeeded ( fileURL: fileURL)
233+ try Task . checkCancellation ( )
228234 guard let updatedContent = workspace. getRealtimeSuggestedCode (
229235 forFileAt: fileURL,
230236 content: editor. content,
@@ -237,12 +243,15 @@ public class XPCService: NSObject, XPCServiceProtocol {
237243 reply ( nil , nil )
238244 return
239245 }
246+ try Task . checkCancellation ( )
240247 reply ( try JSONEncoder ( ) . encode ( updatedContent) , nil )
241248 } catch {
242249 os_log ( . error, " %@ " , error. localizedDescription)
243250 reply ( nil , NSError . from ( error) )
244251 }
245252 }
253+
254+ Task { @ServiceActor in inflightRealtimeSuggestionsTasks. insert ( task) }
246255 }
247256
248257 public func setAutoSuggestion( enabled: Bool , withReply reply: @escaping ( Error ? ) -> Void ) {
@@ -277,10 +286,11 @@ public class XPCService: NSObject, XPCServiceProtocol {
277286 editorContent: Data ,
278287 withReply reply: @escaping ( ) -> Void
279288 ) {
280- Task { @ServiceActor in
289+ let task = Task { @ServiceActor in
281290 do {
282291 let editor = try JSONDecoder ( ) . decode ( EditorContent . self, from: editorContent)
283292 let fileURL = try await Environment . fetchCurrentFileURL ( )
293+ try Task . checkCancellation ( )
284294 let workspace = try await fetchOrCreateWorkspaceIfNeeded ( fileURL: fileURL)
285295 _ = workspace. getRealtimeSuggestedCode (
286296 forFileAt: fileURL,
@@ -297,5 +307,7 @@ public class XPCService: NSObject, XPCServiceProtocol {
297307 reply ( )
298308 }
299309 }
310+
311+ Task { @ServiceActor in inflightRealtimeSuggestionsTasks. insert ( task) }
300312 }
301313}
0 commit comments