Comments (6)
I'm pretty sure this is captured by #138, since if those methods send nexts/error/completed to a serialized id<RACSubscriber>
, it should work even if the original signals deliver on different threads.
from reactivecocoa.
Not if the implementation uses a different subscriber for each signal, which is what most of these methods do.
from reactivecocoa.
I'm not sure I follow. Could you create a small example?
from reactivecocoa.
Hard to have a test case for it, but if you look at +combineLatest:reduce:
:
for(id<RACSignal> signal in signals) {
New RACSubscriber created for each signal
RACDisposable *disposable = [signal subscribe:[RACSubscriber subscriberWithNext:^(id x) {
next
s are synchronized on lastValues
@synchronized(lastValues) {
[lastValues setObject:x ? : [RACTupleNil tupleNil] forKey:[NSString stringWithFormat:@"%p", signal]];
if(lastValues.count == signals.count) {
NSMutableArray *orderedValues = [NSMutableArray arrayWithCapacity:signals.count];
for(id<RACSignal> o in signals) {
[orderedValues addObject:[lastValues objectForKey:[NSString stringWithFormat:@"%p", o]]];
}
if (reduceBlock == NULL) {
[subscriber sendNext:[RACTuple tupleWithObjectsFromArray:orderedValues]];
} else {
[subscriber sendNext:[RACBlockTrampoline invokeBlock:reduceBlock withArguments:orderedValues]];
}
}
}
} error:^(NSError *error) {
error
s aren't synchronized
[subscriber sendError:error];
} completed:^{
completed
s are synchronized on completedSignals
@synchronized(completedSignals) {
[completedSignals addObject:signal];
if(completedSignals.count == signals.count) {
[subscriber sendCompleted];
}
}
}]];
if(disposable != nil) {
[disposables addObject:disposable];
}
}
Since next
, error
and completed
are delivered to different RACSubscriber
s, and are synchronized on different locks, subscriber
could get deliveries from different threads concurrently.
from reactivecocoa.
I can understand why the synchronization might result in delays, but subscriber
– the ultimate subscriber that each intermediate one delivers to – could still serialize the messages it receives, which would solve the thrust of this issue.
from reactivecocoa.
Oh you're right, my bad.
Does this mean #136 is also covered by #138? It doesn't matter if a scheduler delivers concurrently if the subscriber which is the receiver of the delivery takes care of serializing the deliveries.
from reactivecocoa.
Related Issues (20)
- [SwiftPM on Xcode] Package resolution failed HOT 2
- Unable to compile targeting macOS Catalyst using SwiftPM (fix exists)
- why RACObserve(self.scoreStepper,value) not available? HOT 1
- App rejected for HealthKit metadata HOT 4
- UISearchBar delegate proxy crash on Mac Catalyst HOT 1
- Build error when using ReactiveCocoa via Swift Package Manager HOT 3
- can not deinit HOT 2
- Xcode12 ReactiveObj archive error HOT 3
- How to implement PIN input with attempts HOT 1
- Dispose SignalProducer created via Action HOT 1
- UnsafeKVOProperty initializer crashes after updating to ReactiveSwift 6.5.0 HOT 1
- EXC_BAD_ACCESS Cash with NSURL HOT 1
- ReactiveCocoa 11.1.0 incompatible with ReactiveSwift 6.6.0 HOT 5
- Xcode 12.5 beta 3 can't build ReactiveCocoa with SwiftPM. HOT 2
- Using "<~" binding function with Signal.Observers causes memory leaks. HOT 1
- Upgrading from very old version (2.5) fails - can't find ReactiveCocoa.h HOT 1
- Cannot remove an observer <RACKVOProxy 0x280264940> for the key path "unit" from <HGConfigureModel 0x280d25050> because it is not registered as an observer.
- Current version can't be compiled with the latest ReactiveSwift version HOT 2
- Current version can't be compiled with the latest ReactiveSwift version HOT 6
- Add output values support for interception
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from reactivecocoa.