コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 /// <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);
     }
 }
コード例 #4
0
        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;
            }
        }