Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在返回检查循环条件之前强制块完成_Ios_Multithreading_Asynchronous_Objective C Blocks_Dispatch Async - Fatal编程技术网

Ios 如何在返回检查循环条件之前强制块完成

Ios 如何在返回检查循环条件之前强制块完成,ios,multithreading,asynchronous,objective-c-blocks,dispatch-async,Ios,Multithreading,Asynchronous,Objective C Blocks,Dispatch Async,我有一个while循环来检查条件,但是里面的块从未完成,所以它是一个无限循环。这是我的密码 __block BOOL doContinue = YES; while (doContinue) { [NetworkHandle withParam:param url:url complete:^(id result, BOOL error) { if(...) doContinue = NO; } okHandler: ^{} retryHandler:^{} ]

我有一个while循环来检查条件,但是里面的块从未完成,所以它是一个无限循环。这是我的密码

__block BOOL doContinue = YES;
while (doContinue) {
  [NetworkHandle withParam:param url:url complete:^(id result, BOOL error)
  {
    if(...)
       doContinue = NO;
  } okHandler: ^{} retryHandler:^{} ];
}
但是从未调用过完整的块,因此while循环继续进行。 我尝试了这条线索中的所有答案: 但它们没有起作用

我目前的方法让应用程序永远等待

__block BOOL doContinue = YES;
while (doContinue) {
  dispatch_semaphore_t sema = dispatch_semaphore_create(0);

  [NetworkHandle withParam:param url:url complete:^(id result, BOOL error)
  {
    if(...)
       doContinue = NO;
    dispatch_semaphore_signal(sema);
  } okHandler: ^{} retryHandler:^{} ];

  dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
  dispatch_release(sema);
}

您可以使用
@synchronized{…}
块等待执行完成。完成后请告诉我。
+[networkhandlewithparam:url:complete:okHandler:retryHandler:][/code>做什么?如果它在另一个线程/队列上异步执行,则只能等待它完成。如果它稍后在同一线程/队列上执行,则根据定义,它不能等待它完成。@DipenPanchasara我尝试过,但没有work@newacct此方法将param发送到url服务器进行处理并返回结果,检查结果是否告诉仍有数据要加载以再次调用[NetworkHandle…],如果没有数据,则设置doContinue=no,但完整的块永远不会完成,while循环在NetworkHandle获得结果之前检查doccontinueback@keduadoi:如果未调用完成块,则循环不应继续,因为它应被卡住,等待信号量发出信号。所以这没有意义。