internal static void Init(WebConfig webConfig) { if (string.IsNullOrWhiteSpace(webConfig.GamePath)) { return; } PhysicalFileProvider val = new(webConfig.GamePath, ExclusionFilters.Sensitive) { UsePollingFileWatcher = true, UseActivePolling = true }; RefreshSwfs(); RegisterWatch(); void RefreshSwfs() { Console.WriteLine("Refreshing SWFs"); Parallel.ForEach(new DirectoryInfo(webConfig.GamePath).GetFiles().OrderBy(f => f.LastWriteTime), async swf => { byte[] bytes = await System.IO.File.ReadAllBytesAsync(swf.FullName); DataAccess2.CalcHashAndAdd(bytes); }); } void RegisterWatch() { IChangeToken token = val.Watch("*.swf"); token.RegisterChangeCallback(state => { RefreshSwfs(); RegisterWatch(); }, null); } }