objective c - How do I wait for an asynchronously dispatched block to finish? -


i testing code asynchronous processing using grand central dispatch. testing code looks this:

[object runsomelongoperationanddo:^{     stassert… }]; 

the tests have wait operation finish. current solution looks this:

__block bool finished = no; [object runsomelongoperationanddo:^{     stassert…     finished = yes; }]; while (!finished); 

which looks bit crude, know better way? expose queue , block calling dispatch_sync:

[object runsomelongoperationanddo:^{     stassert… }]; dispatch_sync(object.queue, ^{}); 

…but that’s maybe exposing on object.

trying using dispatch_sempahore. should this:

dispatch_semaphore_t sema = dispatch_semaphore_create(0);  [object runsomelongoperationanddo:^{     stassert…      dispatch_semaphore_signal(sema); }];  dispatch_semaphore_wait(sema, dispatch_time_forever); dispatch_release(sema); 

this should behave correctly if runsomelongoperationanddo: decides operation isn't long enough merit threading , runs synchronously instead.


Comments

Popular posts from this blog

asp.net - repeatedly call AddImageUrl(url) to assemble pdf document -

java - Android recognize cell phone with keyboard or not? -

iphone - How would you achieve a LED Scrolling effect? -