Florian Hockmann created TINKERPOP-3029:
-------------------------------------------

             Summary: 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.7.1, 3.6.6, 3.5.8
            Reporter: Florian Hockmann
            Assignee: Florian Hockmann


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)

Reply via email to