# File lib/faraday/adapter/em_http.rb, line 22
      def perform_request(env)
        if parallel?(env)
          manager = env[:parallel_manager]
          manager.add {
            perform_single_request(env).
              callback { env[:response].finish(env) }
          }
        else
          unless EventMachine.reactor_running?
            error = nil
            # start EM, block until request is completed
            EventMachine.run do
              perform_single_request(env).
                callback { EventMachine.stop }.
                errback { |client|
                  error = error_message(client)
                  EventMachine.stop
                }
            end
            raise_error(error) if error
          else
            # EM is running: instruct upstream that this is an async request
            env[:parallel_manager] = true
            perform_single_request(env).
              callback { env[:response].finish(env) }.
              errback {
                # TODO: no way to communicate the error in async mode
                raise NotImplementedError
              }
          end
        end
      end