我使用以下代码来一般链接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()
我还有另一次超时吗?
答案 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)})
);