Home

Awesome

dotnetCampus.AsyncWorkerCollection

中文

BuildNuGet

A collection of tools that support asynchronous methods and support high-performance multithreading.

Install NuGet package

Two different libraries are provided for installation.

Install the traditionary NuGet Dll library

.NET CLI:

dotnet add package dotnetCampus.AsyncWorkerCollection

PackageReference:

<PackageReference Include="dotnetCampus.AsyncWorkerCollection" Version="1.2.1" />

Install the SourceYard NuGet source code

.NET CLI:

dotnet add package dotnetCampus.AsyncWorkerCollection.Source --version 1.2.1

PackageReference:

<PackageReference Include="dotnetCampus.AsyncWorkerCollection.Source" Version="1.2.1">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

Usage

AsyncQueue

An asynchronous queue that supports multiple threads

Create a queue:

  var asyncQueue = new AsyncQueue<FooTask>();

Add task to queue:

  asyncQueue.Enqueue(new FooTask());

Waiting for the task to dequeue:

  var fooTask = await asyncQueue.DequeueAsync();

The advantage of AsyncQueue over Channel is that it supports .NET Framework 45 and simple

DoubleBufferTask

DoubleBufferTask supports multi-threaded fast input data and single-threaded batch processing of data, and supports waiting for buffer execution to complete

var doubleBufferTask = new DoubleBufferTask<Foo>(list =>
{
    // Method to perform batch List<Foo> tasks
    // The incoming delegate will be called when there is data in the DoubleBufferTask, and it means that there is at least one element in the list
});

// Multiple other threads call this code to add the task data
doubleBufferTask.AddTask(new Foo());

// After the business code is completed, call the Finish method to indicate that no more tasks are added
// This Finish method is not thread-safe
doubleBufferTask.Finish();

// Other threads can call WaitAllTaskFinish to wait for the completion of all task data in DoubleBufferTask
// It will return after be Finish method be called and the all the task data be handled
await doubleBufferTask.WaitAllTaskFinish();

AsyncAutoResetEvent

Asynchronous version of AutoResetEvent lock

AsyncAutoResetEvent is functionally the same as AutoResetEvent, except that WaitOne is replaced with WaitOneAsync to support asynchronous waiting

AsyncManualResetEvent

Asynchronous version of ManualResetEvent lock

AsyncManualResetEvent is functionally the same as ManualResetEvent, except that WaitOne is replaced with WaitOneAsync to support asynchronous waiting

Benchmark

See Benchmark.md

Contributing

PRs Welcome

If you would like to contribute, feel free to create a Pull Request, or give us Bug Report.