@@ -16,7 +16,7 @@ @interface STNetTask ()
1616@property (atomic , assign ) BOOL cancelled;
1717@property (atomic , assign ) BOOL finished;
1818@property (atomic , assign ) NSUInteger retryCount;
19- @property (nonatomic , strong ) NSMutableDictionary *stateToBlock;
19+ @property (nonatomic , strong ) NSMutableDictionary <NSNumber *, NSMutableArray *> *stateToBlock;
2020
2121@end
2222
@@ -58,22 +58,37 @@ - (NSTimeInterval)retryInterval
5858}
5959
6060- (void )subscribeState : (STNetTaskState)state usingBlock : (STNetTaskSubscriptionBlock)block
61+ {
62+ if ([NSThread isMainThread ]) {
63+ [self _subscribeState: state usingBlock: block];
64+ }
65+ else {
66+ dispatch_async (dispatch_get_main_queue (), ^{
67+ [self _subscribeState: state usingBlock: block];
68+ });
69+ }
70+ }
71+
72+ - (void )_subscribeState : (STNetTaskState)state usingBlock : (STNetTaskSubscriptionBlock)block
6173{
6274 if (!self.stateToBlock ) {
6375 self.stateToBlock = [NSMutableDictionary new ];
6476 }
65- NSAssert (self.stateToBlock[@(state)] == nil , @" State is subscribed already" );
66- self.stateToBlock [@(state)] = [block copy ];
77+ NSMutableArray *blocks = self.stateToBlock [@(state)];
78+ if (!blocks) {
79+ blocks = [NSMutableArray new ];
80+ self.stateToBlock [@(state)] = blocks;
81+ }
82+ [blocks addObject: [block copy ]];
6783}
6884
6985- (void )notifyState : (STNetTaskState)state
7086{
7187 dispatch_async (dispatch_get_main_queue (), ^{
72- STNetTaskSubscriptionBlock block = self.stateToBlock [@(state)];
73- if ( block) {
88+ NSArray *blocks = self.stateToBlock [@(state)];
89+ for (STNetTaskSubscriptionBlock block in blocks ) {
7490 block ();
7591 }
76-
7792 switch (state) {
7893 case STNetTaskStateFinished:
7994 case STNetTaskStateCancalled: {
0 commit comments