NodeKit
NodeKit copied to clipboard
SPT-1998 Поддержка отмены таски для Combine
Что сделано
- Созданы кастомные Publisher для AsyncNode и AsyncStreamNode с поддержкой отмены Task. Интерфейс и реализация сделаны по аналогии с URLSession DataTaskPublisher.
Примеры использования
Теперь для AsyncNode и AsyncStreamNode интерфейс один, но для каждого из них будет создан свой Publisher:
ChainConfigurator()
.build() // <- Возвращает AsyncNode
.nodeResultPublisher()
.sink {
}
ChainConfigurator()
.build() // <- Возвращает AsyncStreamNode
.nodeResultPublisher()
.sink {
}
При отмене подписки будет вызван cancel у созданной таски:
let cancellable = ChainConfigurator()
.build()
.nodeResultPublisher()
.sink {
}
cancellable.cancel()
При каждой новой подписке будет создана новая таска с вызовом метода process()
let publisher = ChainConfigurator()
.build()
.nodeResultPublisher()
publisher.sink { // <- Создается новая таска и вызывается метод process
}
publisher.sink { // <- Создается новая таска и вызывается метод process
}
Шарить результат можно стандартными средствами Combine:
let multicast = ChainConfigurator()
.build()
.nodeResultPublisher()
.multicast { PassthroughSubject() }
multicast.sink { // <- Новая таска не создается
}
multicast.sink { // <- Новая таска не создается
}
multicast.connect() // <- Создается новая таска и вызывается метод process
Codecov Report
Attention: Patch coverage is 71.95946% with 83 lines in your changes are missing coverage. Please review.
Project coverage is 91.02%. Comparing base (
da998b5) to head (f47756f).
Additional details and impacted files
@@ Coverage Diff @@
## SPT-1998-example-refresh #131 +/- ##
============================================================
- Coverage 91.39% 91.02% -0.37%
============================================================
Files 83 87 +4
Lines 1267 1304 +37
============================================================
+ Hits 1158 1187 +29
- Misses 109 117 +8
| Flag | Coverage Δ | |
|---|---|---|
| tests | 91.02% <71.95%> (-0.37%) |
:arrow_down: |
Flags with carried forward coverage won't be shown. Click here to find out more.
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.