如何处理新的 ConnectAsync API (C# Neo4jClient)
How to handle the new ConnectAsync API (C# Neo4jClient)
我将 Neo4JClient 更新到 4.x 版本,其中包括从 client.Connect();
到 client.ConnectAsync()
的重构。当向 api 发出请求时,连接到 neo4j 的控制器将被实例化,因此在连接和使用连接之间没有太多时间。异步连接所以我的猜测让我遇到了问题,当我已经发出数据库请求时客户端没有连接。我试图通过等待 ResultsAsync
来解决这个问题,但没有解决问题。目前没有文档存在,因为它已经过时了。这是我的代码:
// The client is getting injected from my server
public MyService(GraphClient client)
{
this.client = client;
this.client.ConnectAsync();
}
public async Task<bool> Login(string username, string password)
{
var query = client.Cypher
.Match("(n)")
.Where("n.username = '" + username + "' AND n.password = '" + password + "'")
.Return(n => n.As<User>());
var queryResult = await query.ResultsAsync;
return queryResult.ToList().Count == 1;
}
在你的构造函数中,你会做:
var task = this.client.ConnectAsync();
task.Wait();
或者你可以这样做:
this.client.ConnectAsync().Wait();
还有一些额外的事情,您正在注入的 GraphClient
实际上应该是 IGraphClient
- 如果您以后决定更改为 Bolt 版本,这将使您更容易。
另一个更重要的是,注入它的服务器应该已经完成了 ConnectAsync
位 - 你只想调用一次,如果它被注入多个 类 ,它会被调用不止一次。
我将 Neo4JClient 更新到 4.x 版本,其中包括从 client.Connect();
到 client.ConnectAsync()
的重构。当向 api 发出请求时,连接到 neo4j 的控制器将被实例化,因此在连接和使用连接之间没有太多时间。异步连接所以我的猜测让我遇到了问题,当我已经发出数据库请求时客户端没有连接。我试图通过等待 ResultsAsync
来解决这个问题,但没有解决问题。目前没有文档存在,因为它已经过时了。这是我的代码:
// The client is getting injected from my server
public MyService(GraphClient client)
{
this.client = client;
this.client.ConnectAsync();
}
public async Task<bool> Login(string username, string password)
{
var query = client.Cypher
.Match("(n)")
.Where("n.username = '" + username + "' AND n.password = '" + password + "'")
.Return(n => n.As<User>());
var queryResult = await query.ResultsAsync;
return queryResult.ToList().Count == 1;
}
在你的构造函数中,你会做:
var task = this.client.ConnectAsync();
task.Wait();
或者你可以这样做:
this.client.ConnectAsync().Wait();
还有一些额外的事情,您正在注入的 GraphClient
实际上应该是 IGraphClient
- 如果您以后决定更改为 Bolt 版本,这将使您更容易。
另一个更重要的是,注入它的服务器应该已经完成了 ConnectAsync
位 - 你只想调用一次,如果它被注入多个 类 ,它会被调用不止一次。