public async Task Reload() { _logger.Information("Reloading runtime config"); var newConfig = Clone(); var json = await _loader.Load(); if (!Json.ParseInto(json, newConfig)) { _logger.Error("Failed to parse runtime config"); return; } var validation = RuntimeConfig.GetValidator().Validate(newConfig); if (!validation.IsValid) { _logger.Error("Runtime config is invalid: " + validation.Errors?.FirstOrDefault()); return; } try { _locker.EnterWriteLock(); _config = newConfig; _logger.Information("Runtime config reloaded"); } finally { _locker.ExitWriteLock(); } }