private async Task ValidateCachedContextAsync() { using (var guard = new UpgradeableGuard(_refreshLock)) { if (_cacheRefreshing || _nextCachedRefreshTime > DateTime.Now) { return; } guard.UpgradeToWriterLock(); if (_cacheRefreshing) { return; // Double-check after writer upgrade } _cacheRefreshing = true; } if (_nextCachedRefreshTime <= DateTime.Now) { await RefreshMetadataAsync(); } using (new WriterGuard(_refreshLock)) { _cacheRefreshing = false; } }
private async Task <OidcDataManager> ValidateCachedContextAsync() { using (var guard = new UpgradeableGuard(_refreshLock)) { if (_cacheRefreshing || _options.MetadataRefreshInterval < 0 || _nextCachedRefreshTime > DateTime.Now) { return(this); } guard.UpgradeToWriterLock(); if (_cacheRefreshing) { return(this); // Double-check after writer upgrade } _cacheRefreshing = true; } if (_options.MetadataRefreshInterval >= 0 && _nextCachedRefreshTime <= DateTime.Now) { await TryRefreshMetadataAsync(); } using (new WriterGuard(_refreshLock)) { _cacheRefreshing = false; } return(this); }
/// <summary> /// Validate a connection, if not connected, try connect /// </summary> /// <returns></returns> private bool EnsureConnection(bool throwException = true) { using (var guard = new UpgradeableGuard(_connectionLock)) { if (!_client.IsConnected) { OpenConnection(); if (!_client.IsConnected && throwException) { throw new PlcConnectionException(); } } return(_papper != null && _client.IsConnected); } }
private async Task ValidateCachedContextAsync() { using (var guard = new UpgradeableGuard(_refreshLock)) { if (_cacheRefreshing || _nextCachedRefreshTime > DateTime.Now) return; guard.UpgradeToWriterLock(); if (_cacheRefreshing) return; // Double-check after writer upgrade _cacheRefreshing = true; } if (_nextCachedRefreshTime <= DateTime.Now) await RefreshMetadataAsync(); using (new WriterGuard(_refreshLock)) { _cacheRefreshing = false; } }