/// <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); }
/// <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); }
/// <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; } } }