Skip to content

Latest commit

 

History

History
113 lines (70 loc) · 4.45 KB

README.zh-cn.md

File metadata and controls

113 lines (70 loc) · 4.45 KB

dotnetCampus.AsyncWorkerCollection

一个支持异步方法和支持高性能多线程的工具集合

安装 NuGet 包

这个库提供了两个不同的包可以给大家安装。其中一个包是传统的 Dll 引用包。另一个包是使用 SourceYard 打出来的源代码包,源代码包安装之后将会引用源代码

安装传统 NuGet Dll 库

.NET CLI:

dotnet add package dotnetCampus.AsyncWorkerCollection

PackageReference:

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

安装源代码包

.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>

安装源代码包将会让你的项目引用的是 dotnetCampus.AsyncWorkerCollection 的 C# 源代码,而不是 dll 程序集。使用此方法可以减少 dll 文件以及程序集的引入

使用方法

AsyncQueue

高性能内存生产者消费者队列,支持多线程入队和多线程等待出队

最简使用方法

// 下面的 FooTask 是任意自定义类
var asyncQueue = new AsyncQueue<FooTask>();

// 线程1
asyncQueue.Enqueue(new FooTask());

// 线程2
var fooTask = await asyncQueue.DequeueAsync();

详细请看 dotnet 使用 AsyncQueue 创建高性能内存生产者消费者队列

DoubleBufferTask

双缓存任务和双缓存类,支持多线程快速写入和单线程读取批量的数据,支持等待缓存执行完成

最简使用方法

var doubleBufferTask = new DoubleBufferTask<Foo>(list =>
{
    // 执行批量的 List<Foo> 任务的方法
    // 这个传入的委托将会在缓存有数据时被调用,每次调用的时候传入的 list 列表至少存在一个元素
});

// 其他线程调用 AddTask 方法加入任务
doubleBufferTask.AddTask(new Foo());

// 在业务端完成之后,调用 Finish 方法表示不再有任务加入
// 此 Finish 方法非线程安全,必须业务端根据业务调用
doubleBufferTask.Finish();

// 其他线程可以调用 WaitAllTaskFinish 等待缓存所有任务执行完成
// 在调用 Finish 方法之后,缓存的所有任务被全部执行之后将会返回
await doubleBufferTask.WaitAllTaskFinish();

详细请看 dotnet 双缓存数据结构设计 下载库的文件写入缓存框架

AsyncAutoResetEvent

异步版本的 AutoResetEvent 锁

功能上和 AutoResetEvent 相同,只是将 WaitOne 替换为 WaitOneAsync 用于支持异步等待

详细请看 C# dotnet 高性能多线程工具 AsyncAutoResetEvent 异步等待使用方法和原理

AsyncManualResetEvent

异步版本的 ManualResetEvent 锁

功能上和 ManualResetEvent 相同,只是将 WaitOne 替换为 WaitOneAsync 用于支持异步等待

ExecuteOnceAwaiter

支持本机内多线程调用某一确定的任务的执行,任务仅执行一次,多次调用均返回相同结果

在任务执行完成之后,可以重置任务状态,让任务再次执行

如用来作为执行 同步 这个业务的工具。也就是在 同步 这个业务执行过程中,不允许再次执行 同步 这个业务。同时只要同步过了,那么再次调用只是返回同步结果。只有在同步之后状态发生变更之后,才能再次同步

详细请看 C# dotnet 高性能多线程工具 ExecuteOnceAwaiter 只执行一次的任务