public IList <Dog> Get() { IList <Dog> result = MemoryCache.Get <IList <Dog> >(cacheName); if (result == null) { Task <IList <Dog> > dbFetchTask = new Task <IList <Dog> >(() => DogService.Get()); bool isRunning = false; lock (ThreadWatcher) { isRunning = ThreadWatcher.IsRunning(cacheName); } if (!isRunning) { ThreadStartedEvent?.Invoke(this, new ThreadStartedEvent(cacheName)); // Fire:a event. dbFetchTask.Start(); // Starta bara tråden, om det inte redan körs en sådan. } dbFetchTask.ContinueWith(x => { MemoryCache.Set(cacheName, x.Result, options: MemoryCacheEntryOptions); ThreadFinishedEvent?.Invoke(this, new ThreadFinishedEvent(cacheName)); // Tala om att tråden är klar }); } else { Console.WriteLine($"Used MemoryCache for {cacheName}."); } return(result); }
private void OnThreadFinishedEvent(object sender, ThreadFinishedEvent e) { Console.WriteLine("Stopped thread!!!!!!"); lock (ThreadWatcher) { ThreadWatcher.FinishThread(e); } }