async Task AppendToJournalAsync(JournalOp op, string key, DateTime origin, TimeSpan ttl) { await journalLock.WaitAsync().ConfigureAwait(false); try { using (var stream = await journalFile.OpenStreamForWriteAsync().ConfigureAwait(false)) using (var writer = new StreamWriter(stream, encoding)) { await writer.WriteAsync((char)op).ConfigureAwait(false); await writer.WriteAsync(' ').ConfigureAwait(false); await writer.WriteAsync(key).ConfigureAwait(false); await writer.WriteAsync(' ').ConfigureAwait(false); await writer.WriteAsync(origin.Ticks.ToString()).ConfigureAwait(false); await writer.WriteAsync(' ').ConfigureAwait(false); await writer.WriteAsync(((long)ttl.TotalMilliseconds).ToString()).ConfigureAwait(false); await writer.WriteLineAsync().ConfigureAwait(false); } } finally { journalLock.Release(); } }
void AppendToJournal(JournalOp op, string key) { using (var writer = new StreamWriter(journalPath, true, encoding)) { writer.Write((char)op); writer.Write(' '); writer.Write(key); writer.WriteLine(); } }
void AppendToJournal(JournalOp op, string key, DateTime origin, TimeSpan ttl) { using (var writer = new StreamWriter(journalPath, true, encoding)) { writer.Write((char)op); writer.Write(' '); writer.Write(key); writer.Write(' '); writer.Write(origin.Ticks); writer.Write(' '); writer.Write((long)ttl.TotalMilliseconds); writer.WriteLine(); } }
async Task AppendToJournalAsync(JournalOp op, string key) { await journalLock.WaitAsync().ConfigureAwait(false); try { using (var stream = await journalFile.OpenStreamForWriteAsync().ConfigureAwait(false)) using (var writer = new StreamWriter(stream, encoding)) { await writer.WriteAsync((char)op).ConfigureAwait(false); await writer.WriteAsync(' ').ConfigureAwait(false); await writer.WriteAsync(key).ConfigureAwait(false); await writer.WriteLineAsync().ConfigureAwait(false); } } finally { journalLock.Release(); } }
void AppendToJournal(JournalOp op, string key, DateTime origin, TimeSpan ttl) { lock (lockJournal) { using (var writer = new StreamWriter(journalPath, true, encoding)) { writer.Write((char)op); writer.Write(' '); writer.Write(key); writer.Write(' '); writer.Write(origin.Ticks); writer.Write(' '); writer.Write((long)ttl.TotalMilliseconds); writer.WriteLine(); } } }
void AppendToJournal(JournalOp op, string key) { lock (lockJournal) { using (var writer = new StreamWriter(journalPath, true, encoding)) { writer.Write((char)op); writer.Write(' '); writer.Write(key); writer.WriteLine(); } } }
async Task InitializeWithJournal() { await journalLock.WaitAsync().ConfigureAwait(false); try { try { journalFile = await cacheFolder.GetFileAsync(JournalFileName); } catch (Exception) { journalFile = null; } if (journalFile == null) { journalFile = await cacheFolder.CreateFileAsync(JournalFileName, CreationCollisionOption.ReplaceExisting); return; } else { string line = null; using (var stream = await journalFile.OpenStreamForReadAsync().ConfigureAwait(false)) using (var reader = new StreamReader(stream, encoding)) { stream.Seek(0, SeekOrigin.Begin); while ((line = await reader.ReadLineAsync().ConfigureAwait(false)) != null) { try { var trimmedLine = line.Trim(); JournalOp op = ParseOp(trimmedLine); string key; DateTime origin; TimeSpan duration; switch (op) { case JournalOp.Created: ParseEntry(trimmedLine, out key, out origin, out duration); entries.TryAdd(key, new CacheEntry(origin, duration, null)); break; case JournalOp.Modified: ParseEntry(trimmedLine, out key, out origin, out duration); entries[key] = new CacheEntry(origin, duration, null); break; case JournalOp.Deleted: ParseEntry(trimmedLine, out key); CacheEntry oldEntry; entries.TryRemove(key, out oldEntry); break; } } catch { } } } } } finally { journalLock.Release(); } }
async Task AppendToJournal(JournalOp op, string key, DateTime origin, TimeSpan ttl) { await isInitialized; await semaphoreSlim.WaitAsync(); try { using (var stream = await journalFile.OpenStreamForWriteAsync()) using (var writer = new StreamWriter(stream, encoding)) { await writer.WriteAsync((char)op); await writer.WriteAsync(' '); await writer.WriteAsync(key); await writer.WriteAsync(' '); await writer.WriteAsync(origin.Ticks.ToString()); await writer.WriteAsync(' '); await writer.WriteAsync(((long)ttl.TotalMilliseconds).ToString()); await writer.WriteLineAsync(); } } finally { semaphoreSlim.Release(); } }
async Task AppendToJournal(JournalOp op, string key) { await isInitialized; await semaphoreSlim.WaitAsync(); try { using (var stream = await journalFile.OpenStreamForWriteAsync()) using (var writer = new StreamWriter(stream, encoding)) { await writer.WriteAsync((char)op); await writer.WriteAsync(' '); await writer.WriteAsync(key); await writer.WriteLineAsync(); } } finally { semaphoreSlim.Release(); } }