JIRAチケット
この問題の進捗状況を確認するには、JIRAチケットを参照してください。
CSHARP-1231 に投稿された回避策を参照してください 特定の操作でより短いタイムアウトを使用するアプローチを好む場合は、ServerSelectionTimeoutを現在の2.0.0バージョンのドライバーで設定できるようにします。
新しい2.0非同期APIを使用している場合は、キャンセルトークンを使用して、操作全体に独自のタイムアウトを適用できます。
したがって、前のコメントのキャンセルトークンアプローチをお勧めします。短いサーバー選択タイムアウトを使用すると、サーバー選択タイムアウトが選択の完了にかかる時間よりも短い場合、レプリカセットの選択中に誤った例外が発生する可能性があります。
次のように書くことができます:
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);
}
この例では、ServerSelectionTimeout
はデフォルト値の30秒のままですが、この特定の操作はわずか500ミリ秒後にキャンセルされます(約、キャンセルに少し時間がかかる場合があります)。