public void IsThreadSafe()
        {
            var       graph  = new ConcurrentBidirectionalGraph <int, Edge <int> >();
            const int repeat = 1000;

            var tasks = new List <Task>
            {
                Task.Run(() => ReadAndWriteGraph(graph, repeat, 1)),
                Task.Run(() => ReadAndWriteGraph(graph, repeat, 2)),
                Task.Run(() => ReadAndWriteGraph(graph, repeat, 3)),
            };

            Task.WaitAll(tasks.ToArray());
        }
        private static void ReadAndWriteGraph(ConcurrentBidirectionalGraph <int, Edge <int> > graph, int repeat, int instance)
        {
            var vertex1 = instance;

            graph.AddVertex(vertex1);

            for (int i = 0; i < repeat; i++)
            {
                var vertex2 = i + repeat * instance;
                graph.AddVertex(vertex2);
                Debug.WriteLine($"Vertices={graph.VertexCount}");

                graph.AddEdge(new Edge <int>(vertex1, vertex2));
                Debug.WriteLine($"Edges={graph.EdgeCount}");
            }
        }