买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:江西求是高等研究院
摘要:本发明提供了一种基于开发环境的轻量级单线程异步方法及系统,方法包括定义任务模块、任务行为模块、无任务返回模块与无任务返回行为模块;判断异步任务是否有返回值;若有返回值,则通过第一异步方法执行异步任务,并判断异步任务是否完成,若异步任务完成,则输出异步结果;若无返回值,则通过第二异步方法执行异步任务,并判断异步任务是否完成,若异步任务完成,则输出异步结果,本发明减少了线程切换和上下文切换的开销,从而提高了应用程序的响应性,同时不需要创建额外的线程或任务来执行异步操作,减少了内存和CPU资源的消耗,编写自定义的等待对象,摆脱协程,实现无GC。
主权项:1.一种基于开发环境的轻量级单线程异步方法,其特征在于,包括:在C#环境下定义任务模块与任务行为模块;在C#环境下定义无任务返回模块与无任务返回行为模块;获取异步任务并判断所述异步任务是否有返回值;若所述异步任务有返回值,则通过所述任务模块定义第一异步方法并通过所述任务行为模块将所述第一异步方法注册至所述任务模块中,通过所述第一异步方法执行所述异步任务,并判断所述异步任务是否完成,若所述异步任务完成,则输出异步结果;若所述异步任务无返回值,则通过所述无任务返回模块定义第二异步方法并通过所述无任务返回行为模块将所述第二异步方法注册至所述无任务返回模块中,通过所述第二异步方法执行所述异步任务,并判断所述异步任务是否完成,若所述异步任务完成,则输出异步结果;所述在C#环境下定义任务模块的步骤包括:创建空白任务模块,在所述空白任务模块中定义获取任务对象方法,所述获取任务对象方法用于返回异步任务对象本身;在所述空白任务模块中定义状态字段,所述状态字段至少包括等待中状态、已完成字段、已出错字段,所述状态字段用于跟踪第一异步方法的进度;在所述空白任务模块中定义完成属性,所述完成属性用于返回当前异步任务的执行状态,并当所述状态字段为已完成字段时,所述完成属性为false,否则为true,在异步任务开始时访问所述完成属性是否为true,若所述完成属性为true则输出异步结果;在所述空白任务模块中定义获取异步结果方法,所述异步结果方法用于获取异步任务的结果;在所述空白任务模块中初始化一个线程安全的队列变量,所述队列变量用于识别缓存池中可用的异步任务对象;在所述空白任务模块中定义创建任务对象方法,所述创建任务对象方法用于创建异步任务对象并在创建时判断所述缓存池中是否存在可用异步任务对象,若所述缓存池中存在可用异步任务对象则从所述缓存池中获取,若所述缓存池中不存在可用异步任务对象,则创建新的异步任务对象;在所述空白任务模块中定义缓存池回收方法,所述缓存池回收方法用于在调用所述缓存池回收方法时将所述状态字段设置为等待中状态并判断所述缓存池中对象数量是否超出最大预设数量,若所述缓存池中对象数量未超出最大预设数量,则将对应的异步任务对象放回所述缓存池内;在所述空白任务模块中定义设置结果方法,所述设置结果方法用于在异步操作成功是将所述状态字段修改为已完成状态并执行到下一await处;在所述空白任务模块中定义设置异常方法,所述设置异常方法用于在异步操作异常时将所述状态字段修改为已出错状态,捕获异常并执行到下一await处;将定义完成后的所述空白任务模块使用AsyncMethodBuilderAttribute进行标记并添加相应的泛型参数,控制标记与参数添加完成后的所述空白任务模块继承ICriticalNotifyCompletion接口并实现所述ICriticalNotifyCompletion接口的所有方法,以得到任务模块;所述在C#环境下定义任务行为模块的步骤包括:创建空白任务行为模块,在所述空白任务行为模块中定义第一异步任务构建器,所述第一异步任务构建器用于修改编译器async方法生成的状态机以及支持第一异步方法的构建和执行;在所述空白任务行为模块内添加状态机的实例与异步任务对象;在所述空白任务行为模块内定义第一静态创建方法,所述第一静态创建方法用于创建第一异步任务并对异步任务对象进行初始化;在所述空白任务行为模块内定义第一启动方法,所述第一启动方法通过接收一个引用到状态机的实例作为启动第一异步方法的执行和初始化状态机;在所述空白任务行为模块内定义第一对象判断方法,所述第一对象判断方法用于判定当前的状态机对象是否为空,如果不为空则进行回收然后置空,并调用异步任务对象的设置结果方法;在所述空白任务行为模块内定义第一异常判断方法,所述第一异常判断方法用于判定当前的状态机对象是否为空,如果不为空则进行回收然后置空,并调用异步任务对象的设置异常方法;在所述空白任务行为模块内定义第一回调方法,所述第一回调方法用于在所述异步任务未完成后重新注册第一异步方法并回调,改变异步任务对象的状态字段并返回执行所述异步任务;在定义完成后的所述空白任务行为模块中添加用与所述任务模块相同的泛型参数,以得到任务行为模块;所述在C#环境下定义无任务返回模块的步骤包括:创建空白无任务返回模块,在所述空白无任务返回模块添加无任务完成属性,并将所述无任务完成属性设置为true;在所述空白无任务返回模块中定义协同方法,所述协同方法用于仿照协程的调用方式;将定义完成后的所述空白无任务返回模块使用AsyncMethodBuilderAttribute进行标记,用于与所述无任务返回行为模块建立联系,控制标记完成后的所述空白无任务返回模块继承ICriticalNotifyCompletion接口并实现所述ICriticalNotifyCompletion接口的所有方法,以得到无任务返回模块;所述在C#环境下定义无任务返回行为模块的步骤包括:创建空白无任务返回行为模块,在所述空白无任务返回行为模块中定义第二异步任务构建器,所述第二异步任务构建器用于修改编译器async方法生成的状态机以及支持第二异步方法的构建和执行;在所述空白无任务返回行为模块内添加状态机的实例与异步任务对象;在所述空白无任务返回行为模块内定义第二静态创建方法,所述第二静态创建方法用于创建第二异步任务并对异步任务对象进行初始化;在所述空白无任务返回行为模块内定义第二启动方法,所述第二启动方法通过接收一个引用到状态机的实例作为启动第二异步方法的执行和初始化状态机;在所述空白无任务返回行为模块内定义第二对象判断方法,所述第二对象判断方法用于判定当前的状态机对象是否为空,如果不为空则进行回收然后置空,并调用异步任务对象的设置结果方法;在所述空白无任务返回行为模块内定义第二异常判断方法,所述第二异常判断方法用于判定当前的状态机对象是否为空,如果不为空则进行回收然后置空,并调用异步任务对象的设置异常方法;在所述空白无任务返回行为模块内定义第二回调方法,所述第二回调方法用于在所述异步任务未完成后重新注册第二异步方法并回调,改变异步任务对象的状态字段并返回执行所述异步任务;所述空白无任务返回行为模块定义完成后,以得到无任务返回行为模块。
全文数据:
权利要求:
百度查询: 江西求是高等研究院 一种基于开发环境的轻量级单线程异步方法及系统
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。