       context = %{
         name: Keyword.get(opts, :name, env.__module__),
         keep_original_error: Keyword.get(opts, :keep_original_error, false),
-        should_melt: Keyword.get(opts, :should_melt, &match?({:error, _}, &1))
+        should_melt: Keyword.get(opts, :should_melt, &match?({:error, _}, &1)),
+        mode: Keyword.get(opts, :mode, :sync)
       }
 
-      case :fuse.ask(context.name, :sync) do
+      case :fuse.ask(context.name, context.mode) do
         :ok ->
           run(env, next, context)
 

    - `:keep_original_error` - boolean to indicate if, in case of melting (based on `should_melt`), it should return the upstream's error or the fixed one `{:error, unavailable}`.
    It's false by default, but it will be true in `2.0.0` version
    - `:should_melt` - function to determine if response should melt the fuse

    ## SASL logger


          {:ok, %{status: status}} when status in [428, 500, 504] -> true
          {:ok, _} -> false
          {:error, _} -> true
        end,
        mode: :sync
    end
    ```

