Infinite producer using BlockingCollection
Looks Good To Me.

I was initially confused by this code, so I would want to rename the collection from UniqueStrings to something like UniqueStringBuffer, to make the purpose clear. To me, "buffer" says "I will use this object to hold data temporarily, because the data is consumed at a different rate than it is produced" - which is exactly what you have here.

If you want to take the next step in that direction... I would note that a BlockingCollection can be used for many things, but the only method that should be called on your instance is Take. For that reason, you may want to encapsulate this code inside of a class, with Take (or perhaps something more explicit like GetNext) as its only public method. That would serve the dual purpose of preventing misuse and, again, making the purpose clear. Whether or not you want to go that far is up to you.