Có một vé JIRA CSHARP-1018 để theo dõi vấn đề này. Về cơ bản, trình điều khiển bỏ qua tùy chọn thời gian chờ khi không thể truy cập máy. Tùy chọn thời gian chờ sẽ bị bỏ qua nếu máy bị tắt hoặc không thể truy cập.
Vui lòng tham khảo vé JIRA để theo dõi tiến trình về vấn đề này.
Xem giải pháp được đăng lên CSHARP-1231 theo cách mà ServerSelectionTimeout có thể được đặt trong phiên bản 2.0.0 hiện tại của trình điều khiển nếu bạn thích cách tiếp cận đó để sử dụng thời gian chờ ngắn hơn cho các hoạt động cụ thể.
Nếu bạn đang sử dụng API không đồng bộ 2.0 mới, bạn có thể sử dụng mã thông báo hủy để áp dụng thời gian chờ của riêng bạn cho toàn bộ hoạt động.
Vì vậy, tôi muốn giới thiệu cách tiếp cận mã thông báo hủy trong nhận xét trước. Việc sử dụng thời gian chờ lựa chọn máy chủ ngắn có thể dẫn đến các ngoại lệ giả trong các cuộc bầu cử tập hợp bản sao nếu thời gian chờ lựa chọn máy chủ ngắn hơn thời gian cần một cuộc bầu cử để hoàn thành.
Bạn có thể viết một cái gì đó như thế này:
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);
}
Trong ví dụ này, mặc dù ServerSelectionTimeout
vẫn là giá trị mặc định là 30 giây, thao tác cụ thể này sẽ bị hủy chỉ sau 500 mili giây (ước tính, việc hủy đôi khi có thể lâu hơn một chút).