For a CSPRNG I would say the fact that it can repeat blocks is a **good thing**.  A million is about $2^{20}$. Assuming the block size of AES you would expect a chance of approx $1 - (1 - {1 \over 2^{128}})^{20} \approx 2^{-123}$ for a the initial block to be repeated, and approx ${2^{20} \over 2^{128}} = 2^{-(128 - 20)} = 2^{-108}$ for any collision in the first million blocks to occur.

Generally CSPRNG's have a large internal state, which means that it is impossible to know **when** the PRNG repeats. Due to that, the chance that they hit a *cycle* is extremely low (if a cycle is hit then the CSPRNG would generate the same (large pattern) sequentially). So because of the unpredictability you can use a CSPRNG as stream cipher. Actually, that's true for AES / CTR as well, **if you look at patterns other than 128 bits**. Obviously a pattern of a single bit will repeat **extremely** often :)

However, because many  CSPRNG implementations **are not designed** to generate the same deterministic stream, you should be *extremely careful* of doing so. For instance, they may reseed, use the given seed as additional entropy, generate different output when methods are called differently or even have the algorithm revised.

Of course, AES-CTR will generally be a lot faster than a CSPRNG as well. If you don't like AES or don't have hardware acceleration then a stream cipher such as ChaCha would normally be the way to go.