在c#的多线程中使用neo4j时出现错误。我的应用程序应连接许多不同的节点以获得多个图形。图中的每个节点与该图中的所有其他节点具有相同的编号。为了获得快速结果,我想建立一个多线程应用程序,并在每个线程中放入整个图的计算。 在30秒内同时计算40个图形之后,我从neo4j客户端收到此错误:
System.Net.Http.HttpRequestException:'发送请求时发生错误。 内部异常 WebException:基础连接已关闭:服务器已关闭了预期保持活动状态的连接。
对于同时较少数量的图形,该应用程序可以工作。
我在Windows 10虚拟机上使用neo4j-ce 3.2.1(社区版)。我已经尝试配置neo4j.conf,在其中设置dbms.transaction.timeout = 250s并重新启动GUI。
这是异常产生的代码:
var clListeNodes = clKnoten.Results.ToList().First().ListNodes;
这是我要执行的代码:
private void calling_method()
{
foreach (string cPatient in listPatienten)
{
Thread thread = new Thread(delegate() { verbindungen_einlesen(cPatient); });
thread.SetApartmentState(ApartmentState.MTA);
thread.Start();
}
}
private void verbindungen_einlesen(string cPatient)
{
//var client = new GraphClient(new Uri("http://localhost:7474/db/data"), "neo4j", "Promotion2017");
var client = new GraphClient(new Uri("http://localhost:7474/db/data"), new HttpClientWrapper("neo4j", "Promotion2017", new System.Net.Http.HttpClient() { Timeout = TimeSpan.FromMinutes(2000) }));
client.ConnectAsync();
...
var clKnoten = client.Cypher
.Match("(event1)") //.Match("(event1:" + listNodearten[nIndex].cEventName.Trim().Replace(" ", "_").Replace("<", "krAUF").Replace(">", "krZU").Replace("[", "_").Replace("]", "_").Replace("#", "RAUTE").Replace(":", "DP") + ")")
.With("event1")
.Where((Neo4JNodeClass event1) => event1.Patientnumber == nPatientennr && event1.EventItemId == EventItem)
.Return((event1) => new { ListNodes = event1.CollectAs<Event>() });
var clListeNodes = clKnoten.Results.ToList().First().ListNodes;
//MessageBox.Show("COUNT: "+clListeNodes.Count().ToString());
var listListeNodes = clListeNodes.OrderBy(c => c.Min_from_first_charttime).ToList();
}