gpt4 book ai didi

ios - 如何知道所有并发的 NSOperations 都完成了

转载 作者:行者123 更新时间:2023-11-29 11:39:48 25 4
gpt4 key购买 nike

我的情况是:

  • 我有用户
  • 每个用户都有一些可以通过用户对象获取的历史数据

我想做的是:

  • 最多 2 个用户必须同时获取他们的历史数据(这就是我想使用 NSOperationQueue 的原因)
  • 我需要在任何用户完成获取其历史数据时得到通知
  • 我需要在每个用户完成获取他们的历史数据时得到通知

我要问的是:

  • 我无法通过下面的代码实现我想做的事情?

感谢任何帮助。

    NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
[operationQueue setMaxConcurrentOperationCount:2];

for (User *user in users) {
NSBlockOperation *operationObject = [NSBlockOperation blockOperationWithBlock:^{
[user loadHistoryData:^{
[NSNotificationCenter postNotificationToMainThread:@"oneUserFetchedHistory"];
}];
}];

[operationQueue addOperation:operationObject];
}

这个问题不同于这个question因为我不想链接任何请求。我只想知道它们什么时候全部执行完。

answer只有一个操作队列的完成 block 。

answer提供了一种使操作 block 等待直到对 loadHistoryData 的异步调用完成的方法。如写 setSuspended

我找不到满足我需要的答案。有没有?

最佳答案

我用过 AsyncBlockOperationNSOperationQueue+CompletionBlock

将它们结合起来对我来说是这样的:

  NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue setMaxConcurrentOperationCount:1];
// 1 is serial, more is concurrent

queue.completionBlock = ^{
[NSNotificationCenter postNotificationToMainThread:@"allUsersFetchedHistory"];
};

for (User *user in users){
[queue addOperationWithAsyncBlock:^(AsyncBlockOperation *op) {
[user loadHistoryData:^{
[op complete];
[NSNotificationCenter postNotificationToMainThread:@"oneUserFetchedHistory"];
}];
}];
}

关于ios - 如何知道所有并发的 NSOperations 都完成了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47256724/

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