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)