sql >> Base de Datos >  >> NoSQL >> MongoDB

El controlador C# MongoDB ignora las opciones de tiempo de espera

Hay un ticket JIRA CSHARP-1018 para realizar un seguimiento de este problema. Básicamente, el controlador ignora la opción de tiempo de espera cuando no se puede acceder a la máquina. La opción de tiempo de espera se ignora si la máquina está apagada o no se puede acceder a ella.

Consulte el ticket de JIRA para seguir el progreso de este problema.

Consulte la solución publicada en CSHARP-1231 para saber cómo se puede configurar ServerSelectionTimeout en la versión 2.0.0 actual del controlador si prefiere ese enfoque para usar tiempos de espera más cortos en operaciones específicas.

Si está utilizando la nueva API asíncrona 2.0, puede usar un token de cancelación para aplicar su propio tiempo de espera a la operación general.

Por lo tanto, recomendaría el enfoque del token de cancelación en el comentario anterior. El uso de tiempos de espera de selección de servidor cortos puede dar lugar a excepciones falsas durante las elecciones de conjunto de réplicas si el tiempo de espera de selección de servidor es más corto que el tiempo que tarda en completarse una elección.

Puedes escribir algo como esto:

var startTime = DateTime.UtcNow;
try
{
    using (var timeoutCancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(500)))
    {
        await collection.Find("{ _id : 1 }").ToListAsync(timeoutCancellationTokenSource.Token);
    }
}
catch (OperationCanceledException ex)
{
    var endTime = DateTime.UtcNow;
    var elapsed = endTime - startTime;
    Console.WriteLine("Operation was cancelled after {0} seconds.", elapsed.TotalSeconds);
}

En este ejemplo, aunque ServerSelectionTimeout sigue siendo el valor predeterminado de 30 segundos, esta operación en particular se cancelará después de solo 500 milisegundos (aproximadamente, la cancelación a veces puede demorar un poco más).