Er is een JIRA-ticket CSHARP-1018 om dit probleem te volgen. In principe negeert het stuurprogramma de time-outoptie wanneer de machine niet toegankelijk is. Time-out optie wordt genegeerd als de machine is uitgeschakeld of niet toegankelijk is.
Raadpleeg het JIRA-ticket om de voortgang van dit probleem te volgen.
Zie de tijdelijke oplossing die is gepost op CSHARP-1231 voor een manier waarop de ServerSelectionTimeout kan worden ingesteld in de huidige 2.0.0-versie van het stuurprogramma als u die benadering verkiest boven het gebruik van kortere time-outs voor specifieke bewerkingen.
Als u de nieuwe 2.0 async API gebruikt, kunt u een annuleringstoken gebruiken om uw eigen time-out toe te passen op de algehele bewerking.
Dus ik zou de annuleringstokenbenadering in de vorige opmerking aanbevelen. Het gebruik van korte time-outs voor serverselectie kan leiden tot valse uitzonderingen tijdens verkiezing van replicasets als de time-out voor serverselectie korter is dan de tijd die nodig is om een verkiezing te voltooien.
Je kunt zoiets als dit schrijven:
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);
}
In dit voorbeeld, hoewel de ServerSelectionTimeout
is nog steeds de standaardwaarde van 30 seconden, deze specifieke bewerking wordt na slechts 500 milliseconden geannuleerd (ongeveer, annuleren kan soms iets langer duren).