это не ошибка. это поведение по умолчанию для драйвера c #. драйвер устанавливает соединение с сервером базы данных только тогда, когда инициируется самая первая операция, и для установления соединения потребуется несколько сотен миллисекунд.
последующим операциям не нужно устанавливать новые соединения из-за механизмов пула соединений драйвера. больше соединений будет установлено, только если они действительно необходимы. если приложение не является многопоточным, драйвер обычно открывает около 2 соединений для всего приложения из того, что я видел. если вы проверите файл журнала mongodb, это будет очевидно.
я предлагаю просто игнорировать время, необходимое для инициализации соединения, если вы проводите какие-либо тесты / тесты.
UPDATE:
если ваша база данных размещена в сети, что-то вроде брандмауэра может мешать свободным соединениям. в этом случае вы можете попробовать выполнить следующее, чтобы пустые соединения перерабатывались / обновлялись каждую минуту.
MongoDefaults.MaxConnectionIdleTime = TimeSpan.FromMinutes(1)
если все остальное не работает, единственная оставшаяся опция, о которой я могу подумать, это запустить задачу keep-alive, как показано ниже:
public void InitKeepAlive()
{
Task.Run(async () =>
{
while (true)
{
await client.GetCollection<Document>("Documents")
.AsQueryable()
.Select(d => d.Id)
.FirstOrDefaultAsync();
await Task.Delay(TimeSpan.FromMinutes(1));
}
});
}