use thread-safe ConcurrentBag instead of List