If using a double boiler with a steamer insert, add 2” to 3” of water to the bottom pot, add asparagus to the insert, cover. Heat water to boiling, reduce heat to low and steam until tender, about 20 minutes. Cool 15 minutes before pureeing.
While asparagus is steaming, add oil to a small skillet, heat to medium-low, add onions, sauté until tender, approximately 5 minutes. Add garlic and sauté one additional minute. Remove from heat, add onion, garlic, and cooled asparagus to a food processor or use an immersion blender, pulse until pureed.
Add puree to a large pot along with cayenne, salt and pepper. And broth and stir. Bring to a boil on medium heat, reduce to a simmer and cook 15 minutes. Add milk and continue to cook until hot, approximately 5 minutes. Garnish with a sprinkle of parmesan cheese and a dash of cayenne pepper.