[ https://issues.apache.org/jira/browse/TINKERPOP-3029?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17803487#comment-17803487 ]
ASF GitHub Bot commented on TINKERPOP-3029: ------------------------------------------- FlorianHockmann commented on PR #2424: URL: https://github.com/apache/tinkerpop/pull/2424#issuecomment-1878426662 I added a CHANGELOG / upgrade docs entry and applied the suggestion by @vkagamlyk. > Gremlin.Net: Traversal enumeration fails on .NET 8 > -------------------------------------------------- > > Key: TINKERPOP-3029 > URL: https://issues.apache.org/jira/browse/TINKERPOP-3029 > Project: TinkerPop > Issue Type: Bug > Components: dotnet > Affects Versions: 3.5.8, 3.6.6, 3.7.1 > Reporter: Florian Hockmann > Assignee: Florian Hockmann > Priority: Critical > > This has been reported by Eric Sites on the dev mailing list: > [https://lists.apache.org/thread/snztwgk3s18h83mx8ql455hmx6ncl2r4] > ---- > I am having a lot of issues using the Gremlin.Net driver version 3.7.1 with > .Net 8. > It is almost entirely unusable. > Any request that uses an Iterator throws an exception ({{{}MoveNext{}}}, > {{{}Next{}}}, {{{}Iterate{}}}). > {{{}System.InvalidOperationException: Enumeration has not started. Call > MoveNext{}}}. > Tracked it down to a change in .Net 8 {{IEnumerable<T>.Current}} behavior. > Here is an issue about this filed in dotnet runtime: > [https://github.com/dotnet/runtime/issues/85243] > New bad code: > {code:java} > var enumerator = saves.GetEnumerator(); > while (enumerator.Current == null) // <- Throws exception now > { > if (!enumerator.MoveNext()) > return list; > } > {code} > Should be changed to something like this: > {code:java} > while (enumerator.MoveNext()) > { > var item = enumerator.Current; > } > {code} > Here is an example of the issue in the Gremlin.Net code: > [https://github.com/apache/tinkerpop/blob/e8b9532fc0ec811460e97ebf5e00b8b9ec9192ac/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/DefaultTraversal.cs#L132] > {code:java} > private object? GetCurrent() > { > // Use dynamic to object to prevent runtime dynamic conversion evaluation > return TraverserEnumerator.Current?.Object; > } > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)