Недавно я использую новый драйвер async mongodb java. Я пишу некоторые простые коды испытаний, которые являются:MongoDB: Нет сервера, выбранных ReadPreferenceServerSelector
MongoClient mongoClient = MongoClients.create();
System.out.println("database has been connected!");
SingleResultCallback<Void> callbackWhenFinished = new SingleResultCallback<Void>() {
@Override
public void onResult(final Void result, final Throwable t) {
System.out.println("Operation Finished!");
}
};
mongoClient.listDatabaseNames().forEach(new Block<String>() {
@Override
public void apply(final String s) {
System.out.println(s);
}
}, callbackWhenFinished);
однако, функция обратного вызова не вызывается, выход консоли:
18 апреля 2015 10:50:27 днем ком .mongodb.diagnostics.logging.JULLogger сообщение журнала: Кластер создан с настройками {хостами = [LOCALHOST: 27017], режим = SINGLE, requiredClusterType = НЕИЗВЕСТНЫХ, serverSelectionTimeout = '30000', мс maxWaitQueueSize = 500}
базы данных было c onnected! 18 апреля 2015 10:50:28 днем журнал com.mongodb.diagnostics.logging.JULLogger сообщение: Нет сервер выбран ReadPreferenceServerSelector {readPreference = первичный} из кластера описание ClusterDescription {тип = UNKNOWN, connectionMode = SINGLE , all = [ServerDescription {address = localhost: 27017, type = UNKNOWN, state = CONNECTING}]}. Ожидание 30000 мс до выключения времени
Таким образом, вы можете видеть, что функция обратного вызова не называется. Кто-нибудь знает почему?
Почему я должен явным образом вызывать ожидание, не должна ли программа ждать завершения всего пользовательского потока? – Sisyphus