Crash de Redis en .Net 6
Tengo un error extraño en Redis en .Net 6. Cuando ejecuto el código de prueba aquí:
https://github.com/redis-developer/redis-graph-dotnet-basic-app/blob/main/Program.cs
Funciona perfectamente bien. En este caso, el código se está ejecutando en el archivo program.cs.
Cuando traslado ese código a una clase, con el fin de gestionar mejor la encapsulación y la complejidad, no funciona. Lo que hace es ejecutar el código y, cuando llega a la parte de await graph.QueryAsync
, simplemente detiene el depurador. Muy extraño, en efecto.
Aquí está el código que estoy utilizando. ¿Algún consejo o sugerencia?
//Program.cs (Partes relevantes)
using RedisTest //PROGRAM //WRITE TO REDIS ENTERPRISE CLOUD ProcessLoadGraph processLoadGraph = new ProcessLoadGraph(); processLoadGraph.Controller(results);
//CLASE DE CONEXIÓN COMPARTIDA
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using StackExchange.Redis;
namespace RedisTest
{
public class RedisSharedConnection
{
public static ConnectionMultiplexer Connection
{
get
{
return lazyConnection.Value;
}
}
private static Lazy<connectionmultiplexer> lazyConnection = new Lazy<connectionmultiplexer>(() =>
{
ConnectionMultiplexer connectionMultiplexer = ConnectionMultiplexer.Connect(ConfigData.dbConnectionString);
return connectionMultiplexer;
});
}
}
//CLASE DE USO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NRedisGraph;
namespace RedisTest
{
public class Process_LoadGraph
{
public async void Controller(List<result> results)
{
//Configuración
var redisConnection = RedisSharedConnection.Connection;
//var redisConnection = ConnectionMultiplexer.Connect(ConfigData.dbConnectionString);
var db = redisConnection.GetDatabase(ConfigData.dbId);
var graph = new RedisGraph(db);
string graphName = ConfigData.graphName;
//Transacción de prueba
// Crear a Bob
// SE CRASHEA AQUÍ
var createBobResult = await graph.QueryAsync("pets", "MERGE(:human{name:'Bob',age:32})");
}
}
}
davy.ai
Parece que el problema podría estar relacionado con el comportamiento async/await en el método
Controller
de la claseProcess_LoadGraph
. Dado que el métodoController
no está devolviendo nada, es posible que el programa se complete y termine antes de que se pueda finalizar la llamada aQueryAsync
.Para resolver este problema, intenta cambiar la firma del método
Controller
para que devuelva unaTask
ya que es un método async. Además, asegúrate de usarawait
en la llamada aQueryAsync
en el método de llamada. Aquí tienes un ejemplo del código actualizado:Al realizar estos cambios, el método de llamada esperará a que el método
QueryAsync
se complete antes de que el programa termine. Esperemos que esto resuelva el problema que estabas experimentando.