AsyncTaskTrigger使用说明
$[timeformat('2021-10-08T10:41:00+08:00')]

CI Status
CI Status
Version
Version
License
License
Platform
Platform
Star
Star

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Requirements

Installation

AsyncTaskTrigger is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'AsyncTaskTrigger'

使用方法

异步串行任务

// ---------1、获取触发器单利
AsyncTaskTrigger *trigger = [AsyncTaskTrigger shareTrigger];
__weak typeof (&*trigger)wtrigger = trigger;

// 每一组任务 都需要有一个GroupKey
NSString *groupKey = @"serial_group_serial";

// --------添加任务A
[trigger addTaskAction:^{
    // 开始执行任务A
    [self actionBlockAWithComplet:^{
        // 任务完成后 需要向指定 groupKey 对应的任务组 发送信号量;
        [wtrigger sendSemaphoreToGroupKey:groupKey];
        // 如果某些异步任务是通过代理的方式回调 可以在完成处这样标记下
        // [[AsyncTaskTrigger shareTrigger]sendSemaphoreToGroupKey:groupKey];

    }];
} asyncType:LXTaskAsyncTypeSerial groupKey:groupKey completBlock:^{
    // 本次任务完成后的回调
}];

// -----------添加任务B
[trigger addTaskAction:^{
    // 执行任务B
    [self actionBlockBWithComplet:^{
        [wtrigger sendSemaphoreToGroupKey:groupKey];
    }];
} asyncType:LXTaskAsyncTypeSerial groupKey:groupKey completBlock:nil];

// Block回调发送信号量 另外一种方式
[trigger addTaskHandlerAction:^(LXTaskActionBlock  _Nullable semaphoreHandle) {
    [self actionBlockAWithComplet:^{
        // 可以直接在这里调用这个Block即可
        semaphoreHandle();
    }];
} asyncType:LXTaskAsyncTypeSerial groupKey:groupKey completBlock:nil];

[trigger startTaskActionWithGroupKey:groupKey completBlock:^{
    NSLog(@"kael -- 所有的任务都完成了");
}];

异步并行任务

异步任务只需要更改asyncType类型LXTaskAsyncTypeSerial --> LXTaskAsyncTypeParallel

[trigger addTaskAction:^{
    [self actionBlockAWithComplet:^{
        [wtrigger sendSemaphoreToGroupKey:groupKey];
    }];
} asyncType:LXTaskAsyncTypeParallel groupKey:groupKey completBlock:nil];
    
[trigger addTaskAction:^{
    [self actionBlockBWithComplet:^{
        [wtrigger sendSemaphoreToGroupKey:groupKey];
    }];
} asyncType:LXTaskAsyncTypeParallel groupKey:groupKey completBlock:nil];

[trigger addTaskHandlerAction:^(LXTaskActionBlock  _Nullable semaphoreHandle) {
    [self actionBlockAWithComplet:^{
        semaphoreHandle();
    }];
} asyncType:LXTaskAsyncTypeParallel groupKey:groupKey completBlock:nil];
        
[trigger startTaskActionWithGroupKey:groupKey completBlock:^{
    NSLog(@"kael -- 所有的任务都完成了");
}];

Author

Kael, zhouzuosong_kael@163.com@163.com

License

AsyncTaskTrigger is available under the MIT license. See the LICENSE file for more info.