Der er en JIRA-billet CSHARP-1018 at spore dette problem. Grundlæggende ignorerer driveren timeout-indstillingen, når maskinen ikke er tilgængelig. Timeout-indstilling den ignoreres, hvis maskinen er slukket eller ikke tilgængelig.
Se venligst JIRA-billetten for at følge udviklingen i dette spørgsmål.
Se den løsning, der er sendt til CSHARP-1231 for en måde, hvorpå ServerSelectionTimeout kan indstilles i den aktuelle 2.0.0-version af driveren, hvis du foretrækker den tilgang til at bruge kortere timeouts på specifikke operationer.
Hvis du bruger den nye 2.0 async API, kan du bruge et annulleringstoken til at anvende din egen timeout på den overordnede operation.
Så jeg vil anbefale annulleringstoken-tilgangen i den tidligere kommentar. Brug af korte servervalgstimeouts kan resultere i falske undtagelser under replikasætvalg, hvis servervalgstimeoutet er kortere end den tid, det tager et valg at gennemføre.
Du kan skrive noget som dette:
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);
}
I dette eksempel, selvom ServerSelectionTimeout
stadig er standardværdien på 30 sekunder, vil denne særlige handling blive annulleret efter kun 500 millisekunder (ca., annullering kan nogle gange tage lidt længere tid).