sql >> Databáze >  >> NoSQL >> MongoDB

C# MongoDB Driver Ignoruje možnosti časového limitu

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).



  1. Vysoce výkonné clustery MongoDB na Amazon EC2

  2. 'TypeError:meme.find(...).forEach is not a function' v mongoose node js?

  3. Spuštění snížení mapy selhalo s pymongo, ale úspěch v mongo shellu

  4. Relace NodeJS + ExpressJS + RedisStore není definována