A ruby implementation of a simple dispatch queue using procs
Currently, TaskQueue only has api for dispatching tasks asynchronously.
# Create a queue with as many workers as you want or 1 for a serial queue queue=TaskQueue.new(name: 'my concurrent queue',number_of_workers: 5)task=Task.new(work_block: proc{# some work to be done})queue.add_task_async(task: task)# Or don't supply the number of workers and you'll only get 1, making it a serial queue queue=TaskQueue.new(name: 'my serial queue')task=Task.new(work_block: proc{# some work to be done})queue.add_task_async(task: task)The tasks that are created from the mixin RecreatableTask can be recovered in future executions of the TaskQueue where their were enqueued originally.
# We define a task that includes RecreatableTaskclassHelloToRecreatableTaskincludeTaskQueue::RecreatableTask# The run! method receives a collection of params and defines the real execution of the task itself.defrun!(**params)puts"Hello #{params}"end# In case the queue gets deallocated with RecreatableTasks on its queue, the hash returned by this function will be stored. Make sure that all values are JSON encodable.defparams_to_hash{to: "fastlane"}endendqueue=TaskQueue(name: 'test queue')task=HelloToRecreatableTask.new.to_taskqueue.add_task_async(task: task)bundle exec rspec