函数是否可以从异步块返回值

时间:2014-05-31 16:00:58

标签: ios c cocoa block

假设此代码没有块

int calculateValue (int a, int b) {
  return doSomeStuff(a,b);
}

现在假设函数依赖于异步的东西。所以我将异步部分声明为像这样的块

int calculateValue (int a, int b) {

   int (^myBlock)(int a, int b) = ^int(int a, int b) {
      // do some complex asynchronous stuff
      return result;
   };

// can I do this?
return myBlock;

}

是否需要将块内的计算放入主线程上的dispatch_sync或其他内容?

1 个答案:

答案 0 :(得分:1)

不,你不能这样做。启动异步函数的目的是让调用者可以继续进行其他工作(也许启动其他异步函数?)。

假设您使用的是dispatch_async() - from the docs

  

dispatch_async()函数立即返回,而不等待调用块:

如果您希望能够使用来自调用者的块结果,则可以将对调用者的引用作为块的参数传递。然后,当您的异步任务完成后,请致电其中一个来电者方法以传递您的"返回值"。