neo4j a任务已被取消

时间:2016-04-22 12:03:14

标签: c# .net neo4j neo4jclient

我使用以下代码来一般链接neo 4j中的顶点

public async Task LinkVertices<TSource, TTarget>(Expression<Func<TSource, TTarget, bool>> join, string relationName)
{
        string sourceName = typeof(TSource).Name;
        string targetName = typeof(TTarget).Name;

        var span = (int)TimeSpan.FromMinutes(20).TotalMilliseconds;
        try
        {
            await client.Cypher
                .Match(string.Format("({0}:{0})", sourceName), string.Format("({0}:{0})", targetName))
                .Where(join)
                .Create(string.Format("{0}-[:{2}]->{1}", sourceName, targetName, relationName))
                .MaxExecutionTime(span)
                .ExecuteWithoutResultsAsync();


    }

当我链接较少的数据时,处理速度比工作速度快

我将MaxExecutionTime设置为20分钟,但总是在100秒后我得到TaskCanceledException。 当我使用nonAsync Execute方法时也会发生这种情况。

&#34;正常&#34;堆栈跟踪:

   at Neo4jClient.GraphClient.Neo4jClient.IRawGraphClient.ExecuteCypher(CypherQuery query) in D:\temp\f6198f8\Neo4jClient\GraphClient.cs:line 1072
   at Neo4jClient.Cypher.CypherFluentQuery.ExecuteWithoutResults() in D:\temp\f6198f8\Neo4jClient\Cypher\CypherFluentQuery.cs:line 392
   at Graph.Neo4JGateway.<LinkVertices>d__3`2.MoveNext() in 

AsyncStack Trace:

   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at Neo4jClient.GraphClient.<>c__86`1.<PrepareCypherRequest>b__86_1(Task`1 response) in D:\temp\f6198f8\Neo4jClient\GraphClient.cs:line 979
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Neo4jClient.GraphClient.<Neo4jClient-IRawGraphClient-ExecuteCypherAsync>d__90.MoveNext() in D:\temp\f6198f8\Neo4jClient\GraphClient.cs:line 1088
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Graph.Neo4JGateway.<LinkVertices>d__3`2.MoveNext()

我还有另一次超时吗?

1 个答案:

答案 0 :(得分:3)

听起来可能是HttpClient超时。默认有100秒。

如果您正在使用用户/通行证,那么这将不起作用 - 我们将不得不走一条稍微复杂的路线,但如果您可以在没有用户/通行证的情况下进行测试,那么我可以添加

var client = new GraphClient(new Uri("http://localhost.:7474/db/data"), 
    new HttpClientWrapper(
    new HttpClient() { Timeout = TimeSpan.FromMinutes(20)})
    );

我们在此处传递自定义HttpClientWrapper个实例,Timeout设置为20分钟。

修改

刚刚检查过,我在LinqPad中使用了旧版本,已更新,您可以使用user / pass执行此操作:

var gc = new GraphClient(new Uri("http://localhost.:7474/db/data"), 
    new HttpClientWrapper("user", "pass", 
    new HttpClient() { Timeout = TimeSpan.FromMinutes(20)})
    );