You're right, ordinary synchronized collections won't always work well with coroutines. A special suspending collection might be an improvement, but as you noted, that doesn't seem to be a common approach. Why not? Well, coroutines already have other (better?) solutions to the same problem. In particular, we can have coroutines communicate with each other via channels. Instead of having many coroutines interact with the same mutable collection, we can make one coroutine that interacts with the collection, and have all our other coroutines interact with the first coroutine through a channel. All the tricky synchronization is handled by existing primitives, and the resulting code will generally be very efficient and easy to follow. So there's no real reason for a custom suspending collection—it wouldn't be an improvement on what we can already do.