Instead of this:
IReadOnlyDictionary<string, IReadOnlyCollection<MyType>> results = new ConcurrentDictionary<string, ConcurrentBag<MyType>>();
You need to do this:
ConcurrentDictionary<string, IReadOnlyCollection<MyType>> results = new ConcurrentDictionary<string, IReadOnlyCollection<MyType>>();
or
ConcurrentDictionary<string, ConcurrentBag<Point>> results = new ConcurrentDictionary<string, ConcurrentBag<Point>>();
This is known as Covariance Limitation. Here is more read about it:
basically, if you have a container of parent, you can put any derived class in it. But if you have a container for child, then you can't put parent in it.
In Waterfall, water falls from top to bottom.
https://learn.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/dd799517(v=vs.100)