I don't care about the order of the elements.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx
I don't care about the order of the elements.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx
Union removes duplicates. Concat does not.
So, they produce different results if the sources either contain any items in common, or have any internal duplicates.
If you can guarantee there are no duplicates, or if there are few and you don't care about having them in your output, Concat will be faster since there's no need to test each value against what has already been yielded.
However, if there are many duplicates and you don't need them, the extra processing in Union to remove the dupes may be offset by the savings in your code that consumes the results.
Do you only care about execution speed? How long does it take you to process an element when you receive it?
Concat
is simpler - it doesn't need to perform any processing itself, or buffer the results that it's already returned. However, it will produce more results if there are any elements in the intersection. If you're going to take a long time to process each result, Concat
may end up effectively being slower.