Example #1
0
        /// <summary>
        /// Gets the asynchronous.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="name">The name.</param>
        /// <param name="bSlidingTimeWindow">if set to <c>true</c> [b sliding time window].</param>
        /// <param name="callbackAsync">The callback asynchronous.</param>
        /// <param name="args">The arguments.</param>
        /// <returns></returns>
        public async Task <T> GetAsync <T>(string name, bool bSlidingTimeWindow, Func <string, object[], Task <CacheDataInfo <T> > > callbackAsync = null, params object[] args)
        {
            var node = GetCachedNode(name, bSlidingTimeWindow);

            if (node == null)
            {
                if (callbackAsync == null)
                {
                    return(default(T));
                }

                using (var rLock = new ResourceLockAsync(name))
                {
                    using (await rLock.WriterLockAsync())
                    {
                        node = GetCachedNode(name, bSlidingTimeWindow);
                        if (node == null)
                        {
                            var cData = await callbackAsync(name, args);

                            if (cData == null)
                            {
                                return(default(T));
                            }

                            Set(name, cData.NewCacheData, cData.KeepAlive);
                            return(cData.NewCacheData);
                        }
                    }
                }
            }

            return((T)node.Data);
        }
Example #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="LogTextFileWriter"/> class.
 /// </summary>
 /// <param name="fileName">Name of the file.</param>
 /// <param name="recycleNumber">The recycle number.</param>
 /// <param name="forceDirectoryCreation">if set to <c>true</c> [force directory creation].</param>
 public LogTextFileWriter(string fileName, int recycleNumber, bool forceDirectoryCreation)
 {
     Disposed        = false;
     LogFilePath     = fileName.DetermineParameterPath();
     RecycleNumber   = recycleNumber;
     CreateDirectory = forceDirectoryCreation;
     _resourceLock   = new ResourceLockAsync(fileName);
 }
Example #3
0
        /// <summary>
        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
        /// </summary>
        public void Dispose()
        {
            lock (this)
            {
                if (!Disposed)
                {
                    Disposed = true;
                    GC.SuppressFinalize(this);

                    _resourceLock?.Dispose();
                    _resourceLock = null;
                }
            }
        }