Using Concurrent::Promise while rescuing exceptions in Ruby

This page summarizes the projects mentioned and recommended in the original post on dev.to

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • Concurrent Ruby

    Modern concurrency tools including agents, futures, promises, thread pools, supervisors, and more. Inspired by Erlang, Clojure, Scala, Go, Java, JavaScript, and classic concurrency patterns.

  • As I could not find a clear example about how to rescue exceptions from Concurrent::Promises (part of the Concurrent Ruby gem ) I read through the documentation and here are two examples: one that documents success case and one that shows what is happening when there is an error.

  • rubygems

    Library packaging and distribution for Ruby.

  • require 'bundler/inline' gemfile do ruby "3.0.1" source 'https://rubygems.org' gem "concurrent-ruby" end require "concurrent" require "pp" # Just a simple class that needs to execute something class Load def initialize(id) @id = id end def work exception = [MyException, SecondException].sample raise exception.send(:new) end end class MyException < Exception ; end class SecondException < Exception ; end class ParallelExecution def call # Using here Concurrent::Array to be thread safe exceptions = Concurrent::Array.new promises = [] 10.times do |t| promises << Concurrent::Promises.future { Load.new(t).work }.rescue { exceptions.push(_1) } end # Calling .value on each job to wait for its execution values = Concurrent::Promises.zip(*promises).value # Raising exceptions if any of the jobs were returning an exception if exceptions.length > 0 count_my_exception = exceptions.count { _1.instance_of?(MyException) } count_second_exception = exceptions.count { _1.instance_of?(SecondException) } puts "MyException generated #{count_my_exception}" puts "SecondException generated #{count_second_exception}" end end end ParallelExecution.new.call

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts