ParallelAsync
ParallelAsync copied to clipboard
A .NET utility library for running async methods in parallel batches
ParallelAsync
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);
}
Release notes
1.7.2
- First attempt at enabling SourceLink.
1.7.1
- Updated to latest
CSRakowski.AsyncStreamsPreparations, which usesMicrosoft.Bcl.AsyncInterfaces(correctly...).
1.7.0
- Updated to latest
CSRakowski.AsyncStreamsPreparations, which usesMicrosoft.Bcl.AsyncInterfaces.
1.6.0
- Added support for Async Streams, so you produce an
IAsyncEnumerable<T>.
1.5.4
- Added .NET 6.0 TargetFramework
1.5.2
- Fixed dependency misconfiguration on net50
1.5.1
- Updated target frameworks
1.5.0
- Updated target frameworks
1.4.1
- Updated dependencies
1.4
- Added gist support for
IAsyncEnumberable<T>
1.3.2
- Added the RunId to the BatchStart and BatchStop events
1.3.1
- Reduced overhead in code paths where the input collection is a
T[],maxBatchSizeis greater than1andallowOutOfOrderisfalse
1.3
- Changed assembly signing key
- Further changes to internal implementation details
- Performance improvements when the input collection is a
T[]orIList<T>andmaxBatchSizeis set to1 - Performance improvements in the
allowOutOfOrdercode paths.
1.2.1
- Marked the
Ton theIParallelAsyncEnumerableas covariant - Changes to internal implementation details
1.2
- Added an
EventSourceto expose some diagnostic information. - Changed minimum supported NetStandard from 1.0 to 1.1 (Because of the
EventSource).
1.1.1
- Added support for
IReadOnlyCollection<T>to theListHelper. - Added more XmlDoc to methods and classes.
1.1
- Renamed class to
ParallelAsyncto prevent naming conflicts with theSystem.Threading.Tasks.Parallel. - Renamed namespace to
CSRakowski.Parallelto prevent ambiguous name conflicts between the class and the namespace. - Added new extension methods to allow for fluent sytax usage.
1.0.1
- Enabled Strong Naming.
1.0
- Initial release.