大家好,我是宝弟!
今天给大家推荐一个C#开发的用于运动控制开发、工控逻辑的运动并发流程控制框架CsGo,框架基于CSP模型构建,相对于传统多线程模型、状态机模型、类PLC模型,逻辑结构紧凑清晰,开发效率极高,易于维护升级;.
由于其简洁的设计,开发者可以快速地开发出高效的代码,同时,如果需要对模型进行升级或维护,也会非常方便。
框架是在golang语言的基础上开发的,可以根据需要进行功能的扩展。支持自定义的线程调度,可以根据实际情况选择主UI线程或者其他线程进行调度,以便于逻辑与UI的交互。高精度定时器、调度优先级、逻辑停止、逻辑暂停功能可以更好地控制和管理任务的执行。通过树形的任务调度方式,可以提高任务执行的可靠。即使在单线程的情况下,也能处理大量的任务和IO操作。
CsGo的使用方法很简单,引入类库后即可编写代码:
static async Task Worker(string name, int time = 1000)
{
await generator.sleep(time);
Log(name);
}
A、B、C依次串行
//A->B->C
static async Task Worker1()
{
await Worker("A");
await Worker("B");
await Worker("C");
}
A、B、C全部并行,且依赖同一个strand(隐含参数,所有依赖同一个strand的任务都是线程安全的)
//A
//B
//C
static async Task Worker2()
{
generator.children children = new generator.children();
children.go(() => Worker("A"));
children.go(() => Worker("B"));
children.go(() => Worker("C"));
await children.wait_all();
}
A执行完后,B、C再并行
// -->B
// |
//A->
// |
// -->C
static async Task Worker3()
{
await Worker("A");
generator.children children = new generator.children();
children.go(() => Worker("B"));
children.go(() => Worker("C"));
await children.wait_all();
}
资源获取方式
https://gitee.com/hamasm/CsGo