System.Threading.Tasks.Dataflow 10.0.0-preview.5.25277.114
About
Provides dataflow components that are collectively referred to as the TPL Dataflow Library. This dataflow model promotes actor-based programming by providing in-process message passing for coarse-grained dataflow and pipelining tasks.
Key Features
- Foundation for message passing and parallelizing CPU-intensive and I/O-intensive applications that have high throughput and low latency.
- Provides multiple block types for various dataflow operations (e.g.,
BufferBlock,ActionBlock,TransformBlock). - Dataflow blocks support linking to form networks, allowing you to create complex processing topologies.
How to Use
This sample demonstrates a dataflow pipeline that downloads the book "The Iliad of Homer" from a website and searches the text to match individual words with words that reverse the first word's characters.
using System.Net;
using System.Text.RegularExpressions;
using System.Threading.Tasks.Dataflow;
var nonLetterRegex = new Regex(@"\P{L}", RegexOptions.Compiled);
var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip });
// Setup blocks
// Downloads the requested resource as a string.
TransformBlock<string, string> downloadString = new TransformBlock<string, string>(async uri =>
{
Console.WriteLine("Downloading '{0}'...", uri);
return await client.GetStringAsync(uri);
});
// Separates the specified text into an array of words.
TransformBlock<string, string[]> createWordList = new TransformBlock<string, string[]>(text =>
{
Console.WriteLine("Creating word list...");
// Remove common punctuation by replacing all non-letter characters with a space character.
text = nonLetterRegex.Replace(text, " ");
// Separate the text into an array of words.
return text.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
});
// Removes short words.
TransformBlock<string[], string[]> filterWordList = new TransformBlock<string[], string[]>(words =>
{
Console.WriteLine("Filtering word list...");
return words
.Where(word => word.Length > 3)
.ToArray();
});
// Finds all words in the specified collection whose reverse also exists in the collection.
TransformManyBlock<string[], string> findReversedWords = new TransformManyBlock<string[], string>(words =>
{
Console.WriteLine("Finding reversed words...");
var wordsSet = new HashSet<string>(words);
return from word in wordsSet
let reverse = string.Concat(word.Reverse())
where word != reverse && wordsSet.Contains(reverse)
select word;
});
// Prints the provided reversed words to the console.
ActionBlock<string> printReversedWords = new ActionBlock<string>(reversedWord =>
{
Console.WriteLine("Found reversed words {0}/{1}", reversedWord, string.Concat(reversedWord.Reverse()));
});
// Connect the dataflow blocks to form a pipeline.
var linkOptions = new DataflowLinkOptions { PropagateCompletion = true };
downloadString.LinkTo(createWordList, linkOptions);
createWordList.LinkTo(filterWordList, linkOptions);
filterWordList.LinkTo(findReversedWords, linkOptions);
findReversedWords.LinkTo(printReversedWords, linkOptions);
// Post data to the pipeline, "The Iliad of Homer" by Homer.
downloadString.Post("http://www.gutenberg.org/cache/epub/16452/pg16452.txt");
// Mark the head of the pipeline as complete.
downloadString.Complete();
// Wait for the last block in the pipeline to process all messages.
printReversedWords.Completion.Wait();
// Output:
// Downloading 'http://www.gutenberg.org/cache/epub/16452/pg16452.txt'...
// Creating word list...
// Filtering word list...
// Finding reversed words...
// Found reversed words parts/strap
// Found reversed words deer/reed
// Found reversed words deem/meed
// Found reversed words flow/wolf
// ...
More details can be found on Dataflow (Task Parallel Library) and Walkthrough: Creating a Dataflow Pipeline pages.
Main Types
The main types provided by this library are:
System.Threading.Tasks.Dataflow.ISourceBlock<TOutput>System.Threading.Tasks.Dataflow.ITargetBlock<TInput>System.Threading.Tasks.Dataflow.IPropagatorBlock<TInput,TOutput>System.Threading.Tasks.Dataflow.ActionBlock<TInput>System.Threading.Tasks.Dataflow.BatchBlock<T>System.Threading.Tasks.Dataflow.BatchedJoinBlock<T1, T2>System.Threading.Tasks.Dataflow.BroadcastBlock<T>System.Threading.Tasks.Dataflow.BufferBlock<T>System.Threading.Tasks.Dataflow.JoinBlock<T1, T2>System.Threading.Tasks.Dataflow.TransformBlock<TInput, TOutput>System.Threading.Tasks.Dataflow.TransformManyBlock<TInput, TOutput>System.Threading.Tasks.Dataflow.WriteOnceBlock<T>
Additional Documentation
Feedback & Contributing
System.Threading.Tasks.Dataflow is released as open source under the MIT license. Bug reports and contributions are welcome at the GitHub repository.
Showing the top 20 packages that depend on System.Threading.Tasks.Dataflow.
| Packages | Downloads |
|---|---|
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
4c728dfede639432bd306b4de3f5b49585f3de18
When using NuGet 3.x this package requires at least version 3.4.
|
9 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
When using NuGet 3.x this package requires at least version 3.4.
|
9 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
290303f510986f8f832fd2dc9e313cebe06ec68d
When using NuGet 3.x this package requires at least version 3.4.
|
8 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
When using NuGet 3.x this package requires at least version 3.4.
|
8 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
caa7b7e2bad98e56a687fb5cbaf60825500800f7
When using NuGet 3.x this package requires at least version 3.4.
|
8 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
ccea2e606d948094cf861b81e15245833bfb7006
When using NuGet 3.x this package requires at least version 3.4.
|
8 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
57273284ef6b997ef64890245d4e8940df4d4c6f
When using NuGet 3.x this package requires at least version 3.4.
|
8 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
d43032d4d97ce28daf2347ed735ebceca2a1f260
When using NuGet 3.x this package requires at least version 3.4.
|
8 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
6c78987f00555bdc18c7c11b67368e82309e7e2e
When using NuGet 3.x this package requires at least version 3.4.
|
8 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
811c3ce6c01229f0eaead96f3eb10112a9066b34
When using NuGet 3.x this package requires at least version 3.4.
|
8 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
37d16c2b4d50a6affc6886dd1d066b8e8aba2309
When using NuGet 3.x this package requires at least version 3.4.
|
8 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
612cb8b183c52dff0a7f2e57cbfb58e2f18938cc
When using NuGet 3.x this package requires at least version 3.4.
|
8 |
|
Microsoft.NETCore
Provides a set of packages that can be used when building portable libraries on .NETCore based platforms. \r\n TFS ID: 1599443, GitHub SHA: https://github.com/dotnet/corefx/tree/eede273a4dfabcea608621f5e1bbf8ad00584cfb
|
7 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
85255dde3ecd86987236868a0415acd3265258d2
When using NuGet 3.x this package requires at least version 3.4.
|
7 |
|
Microsoft.NETCore.App
A set of .NET API's that are included in the default .NET Core application model.
cca5d72d48c1dd5633e92a8f2f8f3a4b9f9ff774
When using NuGet 3.x this package requires at least version 3.4.
|
7 |
.NET Framework 4.6.2
- No dependencies.
.NET 8.0
- No dependencies.
.NET 9.0
- No dependencies.
.NET 10.0
- No dependencies.
.NET Standard 2.0
- No dependencies.
.NET Standard 2.1
- No dependencies.