AYTask 0.1.0

AYTask 0.1.0

Maintained by youlianchun.



AYTask 0.1.0

  • By
  • youlianchun

AYTask

CI Status Version License Platform

Example

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

AYTaskQueue

AYTask *task1 = [AYTask taskWithTimeOut:2 task:^(AYTaskCarrier *carrier) {
//   AYCarrier *dCarrier_task2 = carrier.dependencyCarrier[0];
//   id param = dCarrier_task2[@"obj2"];//获取依赖参数
    [self netActionWithDelayTime:1 res:^(id obj1, id obj2) {
        if (carrier.isLive) {
            carrier[@"obj1"] = obj1;
            [self logWithString:@"task1"];
            carrier.filish();
        }   
    }];
}];
task1.flag = @"task1";
AYTask *task2 = [AYTask taskWithTimeOut:3 task:^(AYTaskCarrier *carrier) {
    [self netActionWithDelayTime:2 res:^(id obj1, id obj2) {
        if (carrier.isLive) {
            carrier[@"obj2"] = obj1;
            [self logWithString:@"task2"];
            carrier.filish();
        }
    }];
}];
task2.flag = @"task2";
AYTask *task3 = [AYTask taskWithTimeOut:3 task:^(AYTaskCarrier *carrier) {
    [self netActionWithDelayTime:2 res:^(id obj1, id obj2) {
        if (carrier.isLive) {
            carrier[@"obj3"] = obj1;
            [self logWithString:@"task3"];
            carrier.filish();
        }
    }];
}];
task3.flag = @"task3";
AYTask *task4 = [AYTask taskWithTimeOut:2 task:^(AYTaskCarrier *carrier) {
    [self netActionWithDelayTime:1 res:^(id obj1, id obj2) {
        if (carrier.isLive) {
            carrier[@"obj4"] = obj1;
            [self logWithString:@"task4"];
            carrier.filish();
        }
    }];
}];
task4.flag = @"task4";
AYTask *task5 = [AYTask taskWithTimeOut:3 task:^(AYTaskCarrier *carrier) {
    [self netActionWithDelayTime:1 res:^(id obj1, id obj2) {
        if (carrier.isLive) {
            carrier[@"obj5"] = obj1;
            [self logWithString:@"task5"];
            carrier.filish();
        }
    }];
}];
task5.flag = @"task5";
AYTaskQueue *queue = [AYTaskQueue queueWithToMainCallBack:YES completion:^(AYTaskQueueCarrier *carrier) {
    AYCarrier *carrier_task1 = carrier[1];
    if (carrier_task1.state == AYTaskStateFinish) {
        [self logWithString:[NSString stringWithFormat:@"completion %@",carrier_task1.taskFlag]];
    }
}];

[task1 addDependency:task2];
[task2 addDependency:task4];
[task2 addDependency:task3];
[task4 addDependency:task5];
[task5 addDependency:task1];//存在循环依赖,不会被添加
[task5 addDependency:task2];//存在循环依赖,不会被添加

[queue addTask:task1];
[queue addTask:task2];
[queue addTask:task3];
[queue addTask:task4];
[queue addTask:task5];

queue.maxConcurrentCount = 2;

[queue run];

AYTaskContainer

runAYTasksIterator(@[@"0", @"1", @"2"], ^(id data, AYTaskReter taskReter) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            NSLog(@"task:%@", data);
            taskReter(YES);
        });
    }, ^(BOOL success) {
        NSLog(@"finish");
});

NSMutableArray *tasks = [NSMutableArray array];
[tasks addObject:getAYTaskUnit(^(AYTaskReter taskReter) {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"task0");
        taskReter(YES);
    });
})];
[tasks addObject:getAYTaskUnit(^(AYTaskReter taskReter) {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"task1");
        taskReter(YES);
    });
})];
[tasks addObject:getAYTaskUnit(^(AYTaskReter taskReter) {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"task2");
        taskReter(YES);
    });
})];

runAYTasksGroup(tasks, ^(BOOL success) {
    NSLog(@"finish a");
});
runAYTasksGroup(tasks, ^(BOOL success) {
    NSLog(@"finish b");
});

Requirements

Installation

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

pod 'AYTask'

Author

youlianchun, [email protected]

License

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