diff --git a/Algorithm/Eocron.Algorithms.csproj b/Algorithm/Eocron.Algorithms.csproj
index 51fa35a..452f19e 100644
--- a/Algorithm/Eocron.Algorithms.csproj
+++ b/Algorithm/Eocron.Algorithms.csproj
@@ -22,6 +22,7 @@
+
@@ -36,4 +37,4 @@
README.md
-
\ No newline at end of file
+
diff --git a/Algorithm/FileCache/Async/FileCacheAsync.cs b/Algorithm/FileCache/Async/FileCacheAsync.cs
index 65335d7..d3e3448 100644
--- a/Algorithm/FileCache/Async/FileCacheAsync.cs
+++ b/Algorithm/FileCache/Async/FileCacheAsync.cs
@@ -1,4 +1,5 @@
-using Eocron.Algorithms.Disposing;
+using AsyncKeyedLock;
+using Eocron.Algorithms.Disposing;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -14,79 +15,6 @@ public sealed class FileCacheAsync : IFileCacheAsync, IDisposable
#region Private helper classes
private delegate Task CancellableAction(CancellationToken token);
- private sealed class PerKeySemaphoreSlim : IDisposable
- {
- private sealed class RefCounted
- {
- public RefCounted(T value)
- {
- RefCount = 1;
- Value = value;
- }
-
- public int RefCount { get; set; }
- public T Value { get; private set; }
- }
-
- private readonly SemaphoreSlim _lock = new SemaphoreSlim(1);
- private readonly Dictionary