async void Writer(NeoSocket neoSocket, AsyncQueue <byte[]> queue) { try { while (await queue.HasItemsAsync()) { var buffer = queue.Dequeue(); await neoSocket.WriteAsync(buffer, 0, buffer.Length); } } catch { queue.SetFinished(); } finally { neoSocket.Close(); } }
public async static void Run(AsyncQueue <string> urls, Action <string> action, CancellationToken token) { var outputFiles = new AsyncQueue <string>(); AsyncHelper.RunTasks(urls, url => FetchSlideAsync(url, action, token), outputFiles, token); var fileNames = new List <string>(); while (await outputFiles.HasItemsAsync(token)) { fileNames.Add(outputFiles.Dequeue()); } try { await Task.Delay(-1, token); } catch (TaskCanceledException) { } fileNames.Where(file => file != null).ToList().ForEach(File.Delete); }
public async static void Run(string slidesQuery, string size, Action <string> action, CancellationToken token) { if (string.IsNullOrWhiteSpace(slidesQuery)) { return; } var inputQueries = new AsyncQueue <string>(); slidesQuery.Split('\n').ToList().ForEach(query => inputQueries.Enqueue(query)); inputQueries.SetFinished(); var outputURLs = new AsyncQueue <List <string> >(); AsyncHelper.RunTasks(inputQueries, query => GetSlideURLs(query, size, token), outputURLs, token); var urls = new List <string>(); while (await outputURLs.HasItemsAsync(token)) { foreach (var item in outputURLs.Dequeue()) { urls.Add(item); } } var random = new Random(); urls = urls.OrderBy(x => random.Next()).ToList(); var inputURLs = new AsyncQueue <string>(); urls.ForEach(url => inputURLs.Enqueue(url)); inputURLs.SetFinished(); SlideDownloader.Run(inputURLs, action, token); }