You are right, the delegate can store methods and call several methods at once. It will return the last, unless you explicitly call them.
Using your code, here is an example of an explicite Invoke for your entire collection of methods.
var results = multiplyDelegate.GetInvocationList().Select(x => (int)x.DynamicInvoke(10, 20));
foreach (var result in results)
Console.WriteLine(result);
EDIT:
Func, Action. , Action
foreach (Delegate action in multiplyDelegate.GetInvocationList())
{
action.DynamicInvoke(10, 20);
}
Func.