Make sure your asynchronous operations show up to work on time
MIT License
Bot releases are hidden (Show)
Published by ghuntley almost 8 years ago
Punchclock is the low-level scheduling and prioritization library used by Fusillade to orchestrate pending concurrent operations.
Ok, so you've got a shiny mobile phone app and you've got async/await. Awesome! It's so easy to issue network requests, why not do it all the time? After your users one-🌟 you for your app being slow, you discover that you're issuing way too many requests at the same time.
Then, you try to manage issuing less requests by hand, and it becomes a spaghetti mess as different parts of your app reach into each other to try to
figure out who's doing what. Let's figure out a better way.
var wc = new WebClient();
var opQueue = new OperationQueue(2 /*at a time*/);
// Download a bunch of images
var foo = opQueue.Enqueue(1,
() => wc.DownloadFile("https://example.com/foo.jpg", "foo.jpg"));
var bar = opQueue.Enqueue(1,
() => wc.DownloadFile("https://example.com/bar.jpg", "bar.jpg"));
var baz = opQueue.Enqueue(1,
() => wc.DownloadFile("https://example.com/baz.jpg", "baz.jpg"));
var bamf = opQueue.Enqueue(1,
() => wc.DownloadFile("https://example.com/bamf.jpg", "bamf.jpg"));
// We'll be downloading the images two at a time, even though we started
// them all at once
await Task.WaitAll(foo, bar, baz, bamf);
Now, in a completely different part of your app, if you need something right
away, you can specify it via the priority:
// This file is super important, we don't care if it cuts in line in front
// of some images or other stuff
var wc = new WebClient();
await opQueue.Enqueue(10 /* It's Important */,
() => wc.DownloadFileTaskAsync("http://example.com/cool.txt", "./cool.txt"));
As part of this release we had 4 issues closed.
Breaking change
System.Reactive 3.0
Bug
Improvements
You can download this release from nuget.org
Published by anaisbetts about 10 years ago
Published by anaisbetts over 10 years ago
Published by anaisbetts almost 11 years ago
Thanks to @pedroreys, Punchclock now allows adjusting the maximum amount of concurrent items. If the limit is lowered, in-flight operations are not canceled, the limit only affects items dispatched in the future.
null
for the key now does not limit concurrency based on the keyPublished by anaisbetts almost 11 years ago
Enqueue
to omit optional parameters, thanks @TheAngryByrd!Published by anaisbetts about 11 years ago
Initial Release