Roast the asparagus, onion, and garlic with butter, salt, and pepper in the oven at 400°F for 15-20 minutes. Remove from oven when done and set aside to cool slightly.
Melt the butter in a medium saucepan. Whisk the dry ingredients into the butter and cook for 2 minutes. Slowly add the milk to the sauce pan while whisking, until the flour mixture is incorporated with the milk.
Whisk the Parmesan cheese into the sauce until melted.
Increase the heat to high and bring to a boil, whisking the entire time. Continue cooking until thickened, about 6-8 minutes. Remove the pan from the heat and set aside.
Put the asparagus, onion and garlic into a large pot. Add the chicken broth to the pot and slowly bring to a boil. Once boiling add the cream sauce to the pot and whisk until incorporated. Cook until asparagus is tender.
Remove asparagus, onion and garlic with a slotted spoon and pulse in a blender until liquefied.
Return to the soup and simmer until hot. Grate some Parmesan cheese on each serving and garnish with a few asparagus pieces if desired.