Parallel.Pipes
1.0.0
See the version list below for details.
dotnet add package Parallel.Pipes --version 1.0.0
NuGet\Install-Package Parallel.Pipes -Version 1.0.0
<PackageReference Include="Parallel.Pipes" Version="1.0.0" />
paket add Parallel.Pipes --version 1.0.0
#r "nuget: Parallel.Pipes, 1.0.0"
// Install Parallel.Pipes as a Cake Addin #addin nuget:?package=Parallel.Pipes&version=1.0.0 // Install Parallel.Pipes as a Cake Tool #tool nuget:?package=Parallel.Pipes&version=1.0.0
Pipes is a concurrency abstraction. Threads send messages to each other down pipes.
Pipes can block a thread sending a message while waiting for another thread to be ready to receive that message and vice versa, achieving synchronisation. Pipes can also be asynchronous at either end.
Pipes can be connected together to form pipe systems, which can provide complex behaviour. The resulting system forms a tree of inlets and outlets.
The locking and releasing of pipes is handled transparently and efficiently. The result is much easier to maintain code.
This project was inspired by Communicating Scala Objects although its eventual implementation changed considerably after realising the inherent complexity of what CSO aspires to.
Pipes is designed to be extensible:
* You can create your own pipes, either from the interfaces / base classes, or by combining existing pipes.
* You can extend the fluent building syntax.
* You can create your own inlets / outlets to achieve stricter behaviour. (For example, an inlet which only allows one thread to read from it at once).
Pipes also focusses on letting you decide the rules. While it will enforce safety settings by default, you can choose to ignore them.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET Framework | net is compatible. |
-
- QuickGraph (>= 3.6.61119.7)
- StickySharedResources (>= 1.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
This is the first release. This allows you to:
* Create simple one way in one way out pipes.
* Create capacity pipes allowing the sending of up to a number of messages asynchronously.
* Create two inlet / outlet pipes to allow multiple threads to listen for the same message.
* Create a splitting pipe, requiring readers to be ready at both outlets. This allows you to implement barrier synchronisation.
* Combine pipes into any pipe system forming a tree.
* Create all of your own components off of the simplified framework. Use the examples provided to learn how to write your own.