File tree Expand file tree Collapse file tree 2 files changed +22
-2
lines changed
Sources/ComposableArchitecture
Tests/ComposableArchitectureTests Expand file tree Collapse file tree 2 files changed +22
-2
lines changed Original file line number Diff line number Diff line change @@ -102,6 +102,8 @@ extension Effect {
102
102
} catch is CancellationError {
103
103
return
104
104
} catch {
105
+ guard !Task. isCancelled
106
+ else { return }
105
107
guard let handler else {
106
108
reportIssue (
107
109
"""
Original file line number Diff line number Diff line change @@ -285,6 +285,22 @@ final class EffectCancellationTests: BaseTCATestCase {
285
285
}
286
286
XCTAssertEqual ( output, [ 1 , 2 ] )
287
287
}
288
+
289
+ @available ( iOS 15 . 0 , * )
290
+ func testCancellationWithoutThrowingCancellationError( ) async throws {
291
+ let effect = Effect < Void > . run { send in
292
+ let session = URLSession ( configuration: . ephemeral)
293
+ let request = URLRequest ( url: URL ( string: " http://ipv4.download.thinkbroadband.com/1GB.zip " ) !)
294
+ let ( data, response) = try await session. data ( for: request, delegate: nil )
295
+ _ = ( data, response)
296
+ }
297
+ . cancellable ( id: 1 )
298
+ Task {
299
+ for await _ in effect. actions { }
300
+ }
301
+ try await Task . sleep ( nanoseconds: 10_000_000 )
302
+ Task . cancel ( id: 1 )
303
+ }
288
304
}
289
305
290
306
#if DEBUG
@@ -350,15 +366,17 @@ final class EffectCancellationTests: BaseTCATestCase {
350
366
. publisher {
351
367
Just ( idx)
352
368
. delay (
353
- for: . milliseconds( Int . random ( in: 1 ... 100 ) ) , scheduler: queues. randomElement ( ) !
369
+ for: . milliseconds( Int . random ( in: 1 ... 100 ) ) ,
370
+ scheduler: queues. randomElement ( ) !
354
371
)
355
372
}
356
373
. cancellable ( id: id) ,
357
374
358
375
. publisher {
359
376
Empty ( )
360
377
. delay (
361
- for: . milliseconds( Int . random ( in: 1 ... 100 ) ) , scheduler: queues. randomElement ( ) !
378
+ for: . milliseconds( Int . random ( in: 1 ... 100 ) ) ,
379
+ scheduler: queues. randomElement ( ) !
362
380
)
363
381
. handleEvents ( receiveCompletion: { _ in Task . cancel ( id: id) } )
364
382
}
You can’t perform that action at this time.
0 commit comments