A .NET utility library for running async methods in parallel batches.
Available on NuGet: and GitHub:
On the side, working on improving usage of
Example usage:
using CSRakowski.Parallel;
List<string> fileUrls = GetFileUrls();
var files = await ParallelAsync.ForEachAsync(fileUrls, (url) => {
return DownloadFileAsync(url);
}, maxBatchSize: 8, allowOutOfOrderProcessing: true);
As of version 1.1 a fluent syntax is also available:
using CSRakowski.Parallel.Extensions;
List<string> fileUrls = GetFileUrls();
var files = await fileUrls
.AsParallelAsync()
.WithMaxDegreeOfParallelism(8)
.WithOutOfOrderProcessing(false)
.ForEachAsync((url) => {
return DownloadFileAsync(url);
});
In version 1.6, support for Async Streams has been added.
This allows you to chain together multiple invocations by passing along an IAsyncEnumerable<T>
, sort of like a pipeline:
using CSRakowski.Parallel;
List<string> fileUrls = GetFileUrls();
var fileDataStream = ParallelAsync.ForEachAsyncStream(fileUrls, (url) => {
return DownloadFileAsync(url);
}, maxBatchSize: 4, allowOutOfOrderProcessing: true);
var resultStream = ParallelAsync.ForEachAsyncStream(fileDataStream, (fileData) => {
return ParseFileAsync(fileData);
}, maxBatchSize: 4, allowOutOfOrderProcessing: true);
await foreach (var result in resultStream)
{
HandleResult(result);
}
- First attempt at enabling SourceLink.
- Updated to latest
CSRakowski.AsyncStreamsPreparations
, which usesMicrosoft.Bcl.AsyncInterfaces
(correctly...).
- Updated to latest
CSRakowski.AsyncStreamsPreparations
, which usesMicrosoft.Bcl.AsyncInterfaces
.
- Added support for Async Streams, so you produce an
IAsyncEnumerable<T>
.
- Added .NET 6.0 TargetFramework
- Fixed dependency misconfiguration on net50
- Updated target frameworks
- Updated target frameworks
- Updated dependencies
- Added gist support for
IAsyncEnumberable<T>
- Added the RunId to the BatchStart and BatchStop events
- Reduced overhead in code paths where the input collection is a
T[]
,maxBatchSize
is greater than1
andallowOutOfOrder
isfalse
- Changed assembly signing key
- Further changes to internal implementation details
- Performance improvements when the input collection is a
T[]
orIList<T>
andmaxBatchSize
is set to1
- Performance improvements in the
allowOutOfOrder
code paths.
- Marked the
T
on theIParallelAsyncEnumerable
as covariant - Changes to internal implementation details
- Added an
EventSource
to expose some diagnostic information. - Changed minimum supported NetStandard from 1.0 to 1.1 (Because of the
EventSource
).
- Added support for
IReadOnlyCollection<T>
to theListHelper
. - Added more XmlDoc to methods and classes.
- Renamed class to
ParallelAsync
to prevent naming conflicts with theSystem.Threading.Tasks.Parallel
. - Renamed namespace to
CSRakowski.Parallel
to prevent ambiguous name conflicts between the class and the namespace. - Added new extension methods to allow for fluent sytax usage.
- Enabled Strong Naming.
- Initial release.