/// <summary>
        /// Executes a server-side traversal
        /// </summary>
        /// <typeparam name="TVertex">Type of vertex</typeparam>
        /// <typeparam name="TEdge">Type of edge</typeparam>
        /// <param name="config">Configuration for the traversal</param>
        /// <param name="startVertex">Id of the startVertex</param>
        /// <param name="baseResult"></param>
        /// <returns>TraversalResult<TVertex, TEdge></returns>
        public async Task <TraversalResult <TVertex, TEdge> > TraverseAsync <TVertex, TEdge>(TraversalConfig config, string startVertex = null, Action <BaseResult> baseResult = null)
        {
            var command = new HttpCommand(this)
            {
                Api    = CommandApi.Traversal,
                Method = HttpMethod.Post
            };

            config.StartVertex = startVertex ?? config.StartVertex;

            var result = await command.RequestMergedResult <TraversalContainerResult <TVertex, TEdge> >(config).ConfigureAwait(false);

            if (baseResult != null)
            {
                baseResult(result.BaseResult);
            }

            return(result.Result.Result);
        }
 /// <summary>
 /// Executes a server-side traversal
 /// </summary>
 /// <typeparam name="TVertex">Type of vertex</typeparam>
 /// <typeparam name="TEdge">Type of edge</typeparam>
 /// <param name="config">Configuration for the traversal</param>
 /// <param name="startVertex">Id of the startVertex</param>
 /// <param name="baseResult"></param>
 /// <returns>TraversalResult<TVertex, TEdge></returns>
 public TraversalResult <TVertex, TEdge> Traverse <TVertex, TEdge>(TraversalConfig config, string startVertex = null, Action <BaseResult> baseResult = null)
 {
     return(TraverseAsync <TVertex, TEdge>(config, startVertex, baseResult).ResultSynchronizer());
 }