Existuje vstupenka JIRA CSHARP-1018 sledovat tento problém. Ovladač v zásadě ignoruje možnost časového limitu, když stroj není dostupný. Možnost časového limitu je ignorována, pokud je stroj vypnutý nebo nedostupný.
Podívejte se prosím na lístek JIRA, abyste mohli sledovat pokrok v této záležitosti.
Podívejte se na řešení zveřejněné na adrese CSHARP-1231 způsob, jakým lze nastavit ServerSelectionTimeout v aktuální verzi ovladače 2.0.0, pokud dáváte přednost tomuto přístupu před používáním kratších časových limitů u konkrétních operací.
Pokud používáte nové asynchronní API 2.0, můžete použít token zrušení k použití vlastního časového limitu na celkovou operaci.
Takže bych doporučil přístup zrušení tokenu v předchozím komentáři. Použití krátkých časových limitů pro výběr serveru může mít za následek falešné výjimky během voleb sady replik, pokud je časový limit výběru serveru kratší než čas potřebný k dokončení voleb.
Můžete napsat něco takového:
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);
}
V tomto příkladu, i když ServerSelectionTimeout
je stále výchozí hodnota 30 sekund, tato konkrétní operace bude zrušena po pouhých 500 milisekundách (přibližně, zrušení může někdy trvat o něco déle).