Class: Dispatch::Group

Inherits:
Object show all

Overview

Dispatch::Group is used to aggregate multiple blocks that have been submitted asynchronously to different queues. This lets you ensure they have all completed before beginning or submitting additional work.

Class Method Summary (collapse)

Instance Method Summary (collapse)

Methods inherited from Object

#dispatch_object, #resume!, #suspend!, #suspended?

Methods inherited from NSObject

#!, #!=, #!~, #<=>, #==, #===, #=~, #Rational, #__callee__, #__method__, #__send__, #__type__, `, allocWithZone:, #autoContentAccessingProxy, autoload, autoload?, autorelease_pool, #awakeAfterUsingCoder:, binding, block_given?, caller, cancelPreviousPerformRequestsWithTarget:, cancelPreviousPerformRequestsWithTarget:selector:object:, catch, class, classFallbacksForKeyedArchiver, #classForCoder, #classForKeyedArchiver, classForKeyedUnarchiver, #clone, conformsToProtocol:, #copy, copyWithZone:, #dealloc, #define_singleton_method, description, display, #doesNotRecognizeSelector:, #dup, #enum_for, #eql?, #equal?, #extend, fail, #finalize, format, #forwardInvocation:, #forwardingTargetForSelector:, framework, #freeze, #frozen?, getpass, gets, global_variables, #init, initialize, #initialize_clone, #initialize_copy, #initialize_dup, #inspect, instanceMethodForSelector:, instanceMethodSignatureForSelector:, #instance_eval, #instance_exec, #instance_of?, #instance_variable_defined?, #instance_variable_get, #instance_variable_set, #instance_variables, instancesRespondToSelector:, isSubclassOfClass:, #is_a?, iterator?, #kind_of?, lambda, load, load_bridge_support_file, load_plist, local_variables, loop, #method, #methodForSelector:, #methodSignatureForSelector:, #methods, #mutableCopy, mutableCopyWithZone:, new, #nil?, open, p, #performSelector:onThread:withObject:waitUntilDone:, #performSelector:onThread:withObject:waitUntilDone:modes:, #performSelector:withObject:afterDelay:, #performSelector:withObject:afterDelay:inModes:, #performSelectorInBackground:withObject:, #performSelectorOnMainThread:withObject:waitUntilDone:, #performSelectorOnMainThread:withObject:waitUntilDone:modes:, print, printf, #private_methods, proc, #protected_methods, #public_method, #public_methods, #public_send, putc, puts, raise, rand, readline, readlines, #replacementObjectForCoder:, #replacementObjectForKeyedArchiver:, require, resolveClassMethod:, resolveInstanceMethod:, #respond_to?, #respond_to_missing?, select, #send, setVersion:, #singleton_methods, sprintf, srand, superclass, #taint, #tainted?, #tap, test, throw, #to_plist, #to_s, trace_var, trap, #trust, #untaint, untrace_var, #untrust, #untrusted?, version

Constructor Details

- (Dispatch::Group) Dispatch

Returns a Group allowing for aggregate synchronization, as defined in: dispatch_group_create(3)

You can dispatch multiple blocks and track when they all complete, even though they might run on different queues. This behavior can be helpful when progress can not be made until all of the specified tasks are complete.

gcdg = Dispatch::Group.new

Returns:

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class NSObject

Class Method Details

+ (Object) alloc

Instance Method Details

- (Object) notify(queue) { ... }

Asynchronously schedules a block to be called when the previously submitted dispatches for that group have completed.

gcdq = Dispatch::Queue.new('doc')
grp = Dispatch::Group.new
gcdq.async(grp) { print 'foo' }
grp.notify(gcdq) { print 'bar' } #=> foobar

Yields:

- (Object) notify(queue) { ... }

Asynchronously schedules a block to be called when the previously submitted dispatches for that group have completed.

gcdq = Dispatch::Queue.new('doc')
grp = Dispatch::Group.new
gcdq.async(grp) { print 'foo' }
grp.notify(gcdq) { print 'bar' } #=> foobar

Yields:

- (Boolean) wait(timeout = nil)

Waits until all the blocks associated with the grp have finished executing or until the specified timeout has elapsed. The function will return true if the group became empty within the specified amount of time and will return false otherwise. If the supplied timeout is nil, the function will wait indefinitely until the specified group becomes empty, always returning true.

gcdq = Dispatch::Queue.new('doc')
grp = Dispatch::Group.new
gcdq.async(grp) { sleep 4 }
grp.wait(5) #=> true

Returns:

  • (Boolean)