How to get results list of delegate's invocation?

No, there isn't a better way - when you invoke a multicast delegate, the result is just the result of the final delegate. That's what it's like at the framework level.

Multicast delegates are mostly useful for event handlers. It's relatively rare to use them for functions like this.

Note that Delegate itself isn't generic either - only individual delegate types can be generic, because the arity of the type can change based on the type. (e.g. Action<T> and Action<T1, T2> are unrelated types really.)


You can accomplish what you want if you don't use a Func<int>, but an Action which takes a method as parameter which processes the return values. Here is a small example:

    static Action<Action<int>> OnMyEvent=null;

    static void Main(string[] args)
    {
        OnMyEvent += processResult => processResult(8);
        OnMyEvent += processResult => processResult(16);
        OnMyEvent += processResult => processResult(32);

        var results = new List<int>();
        OnMyEvent(val => results.Add(val));

        foreach (var v in results)
            Console.WriteLine(v);

    }