gpt4 book ai didi

ios - 如何并行跟踪两个 NSProgress?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:00:34 27 4
gpt4 key购买 nike

我有两个不同的大任务,每个任务都有几个子任务。每个子任务都有一个我手动更新的子 NSProgress。每个大任务都有一个父 NSProgress 和几个

[progress becomeCurrentWithPendingUnitCount:1.0]
// Perform subtask which generates the child `NSProgress`.
[progress resignCurrent]

在不同的时间调用。两个大任务进度报告中的每一个都适用于此设置。

我的问题是我想并行执行这两个大任务,并且我想跟踪它们的整体进度。有什么办法吗?

我尝试在外层创建一个 NSProgress 对象来包装两个大任务的 NSProgress (所以总共三个 NSProgress 级别) ,但问题是这两个任务在更新进度时“打架”。也就是说,一个任务可以执行 becomeCurrentWithPendingUnitCount:,然后另一个任务可以执行 resignCurrent,这会导致异常(因为第二个任务的 NSProgress 不是当前)。

使这两个任务按顺序而不是并行解决了这个问题,但我真的很想同时执行它们。有什么想法吗?

最佳答案

是的,您可以使用 NSProgress 并行运行 2 个异步操作。这是我所做工作的一个片段。

   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
[self.progress becomeCurrentWithPendingUnitCount:40];
[self startAsyncTask1];
[self.progress resignCurrent];
[self.progress becomeCurrentWithPendingUnitCount:60];
[self startAsyncTask2];
[self.progress resignCurrent];
});

- (void)startAsyncTask1{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSProgress *taskProgress = [NSProgress progressWithTotalUnitCount:allUsers.count];
[taskProgress becomeCurrentWithPendingUnitCount:allUsers.count];
[self startUploadingAllUsers];
[taskProgress resignCurrent];
});
}
-(void)startUploadingAllUsers{
for(id user in allUsers){
[self uploadUser:user];
}
}
-(void)uploadUser:(id)user{
NSProgress *taskProgress = [NSProgress progressWithTotalUnitCount:user.photos.count];
//Do upload and in completion of photo upload increment taskProgress.completedUnitCount
//This last task does not get resigned. It does not become active either.
}

您必须确保您的 2 个任务是异步的。这意味着立即调用 resign 调用,即使任务仍在执行。当我试图在完成异步任务时辞职时,由于 NSProgress 已经在其他地方辞职,我得到了那个错误。因此,就像我的示例一样,Task1 和 Task2 也是异步的,并且其中还包含子 NSProgresses。您或多或少希望在启动异步任务后立即放弃当前进度,而不是等到它完成。

作为旁注,我喜欢使用 100 个单位作为待处理,这样我就可以将每个任务视为它的百分比。您也可以对未决单元使用字节计数,但我倾向于在发生实际数据处理的较低子进程而不是在父进程中这样做。就像我的例子一样,我分派(dispatch)了一个异步任务来将所有新用户对象上传到 API 和一个进程来上传所有新用户照片。照片任务计算照片的字节大小并将其用于更新子进程,但父任务大约占主任务的 40%,这就是我使用百分比的原因,因为有时您不知道聚合字节数,如果您具有复杂的多对象过程。

关于ios - 如何并行跟踪两个 NSProgress?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31252591/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com