ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LoxodonFramework异步编程指南:AsyncResult、AsyncTask与CoroutineTask三类任务怎么选

LoxodonFramework异步编程指南:AsyncResult、AsyncTask与CoroutineTask三类任务怎么选 LoxodonFramework异步编程指南AsyncResult、AsyncTask与CoroutineTask三类任务怎么选【免费下载链接】loxodon-frameworkLoxodonFramework是一个轻量级的MVVM(Model-View-ViewModel)框架它是专门为Unity3D游戏开发设计的参考了WPF和Android的MVVM设计它提供了视图和视图模型的数据绑定、本地化、一个简单的对象容器、配置文件组件、线程工具组件、应用上下文和玩家上下文异步线程和协程的任务组件等基本组件同时还提供了一个UI视图的框架。所有代码都基于面向对象面向接口的思路设计几乎所有功能都可以自定义。而且在数据绑定部分进行了性能优化避免值类型装箱拆箱最小化垃圾回收的开销使用动态委托/静态织入技术确保数据绑定和直接调用有相当的性能0GC更新UI视图等等它支持绑定到UGUI、UIToolkit和FairyGUI控件同时也很容易扩展对其他UI控件的支持。此外它已经在项目中得到验证UWA评分SSS级可在战斗中完全关闭GC在6、7前手机都保证60FPS性能优越稳定可靠架构清晰可灵活扩展。 我们希望它能够帮助您更快、更轻松地开发游戏。 本框架使用C#语言开发同时也支持使用XLua或者ILRuntime来开发如果项目需要热更新那么只要安装了XLua或者ILRuntime插件则可以完全使用Lua或者ILRuntime来开发游戏。对于新立项的项目建议使用HybridCLR来做热更新。 这个插件兼容 MacOSX,Windows,Linux,UWP,IOS and Android,WebGL等等并且完全开源。项目地址: https://gitcode.com/vovgou/loxodon-frameworkLoxodonFramework 是专为 Unity3D 游戏开发设计的轻量级 MVVM 框架其内置的异步任务组件让游戏开发者可以轻松处理资源加载、后台计算、协程等待等异步场景。本文将带你快速搞懂AsyncResult、AsyncTask、CoroutineTask三类任务组件的区别与适用场景帮你在新项目中做出正确选择。一、先看懂一张选型表 三类组件都位于框架的Asynchronous命名空间下核心差异可以一张表说清组件执行线程设计定位典型用途AsyncResult你决定协程或任意线程异步结果载体Future/Promise 模式承载任务结果支持取消、同步等待或回调AsyncTask后台线程 或 协程带完整生命周期回调的任务封装类似 Android 的 AsyncTask执行前/后、出错、结束各阶段回调CoroutineTask主线程协程与 .NET Task 同款 API 的协程版任务WhenAll/WhenAny/ContinueWith 组合异步流程⚠️重要提示官方文档明确说明AsyncTaskIAsyncTask和ProgressTask用到了多线程在 WebGL 平台不支持且已标记[Obsolete]将在 3.0 版本移除。2.0 版本后的新项目建议统一使用AsyncResult/CoroutineTask。二、AsyncResult轻量的异步结果 AsyncResult是整个异步体系的基石——它本身不执行任务只负责承载一个将来会产生结果的操作。它有三个核心能力可取消创建时传入cancelable true随时调用Cancel()任务内部通过IsCancellationRequested感知取消同步等待yield return result.WaitForDone();一行挂起协程直到完成回调通知result.Callbackable().OnCallback(...)注册完成回调无需阻塞。最常用的组合方式是启动一个协程或后台线程干活干完调用SetResult()写入结果调用方通过等待或回调拿到值。源码见 AsyncResult.cs。// 同步方式挂起协程等待结果 IAsyncResultbool result StartTask(); yield return result.WaitForDone(); Debug.Log(任务完成: result.Result);如果任务是下载、读表这类需要展示进度的操作可以换成它的进阶版ProgressResult多出一个UpdateProgress()进度更新接口。三、AsyncTask带生命周期钩子的任务封装 AsyncTask是对一个线程任务或协程任务的完整封装传一个IEnumerator迭代器得到协程任务传一个委托函数得到后台线程任务。它把任务生命周期拆成四个阶段每个阶段都能挂自己的回调OnPreExecute()—— 任务开始前OnPostExecute()—— 任务成功后OnError()—— 任务失败时OnFinish()—— 无论成败都执行的收尾逻辑new AsyncTask(DoTask(), true) .OnPreExecute(() { /* 显示加载条 */ }) .OnPostExecute(() { /* 更新UI */ }) .OnError(e { /* 提示错误 */ }) .OnFinish(() { /* 清理状态 */ }) .Start();它还支持Start(delay)延迟启动、Cancel()取消任务。这种阶段式回调写法非常适合加载界面、网络请求这类标准流程。但请记住前面的提示新项目尤其是 WebGL 目标优先选 AsyncResult源码见 AsyncTask.cs。四、CoroutineTaskTask 同款 API 的协程版 CoroutineTask的设计目标是让 Unity 协程异步任务和 .NET 的System.Threading.Tasks.Task用法保持一致。它的 API 基本与 Task 对齐唯一区别是任务全部以协程方式在主线程执行因此天然适合操作 UI、动画等必须在主线程完成的工作。三大招牌 APIAPI作用场景Delay(seconds)延时任务代替WaitForSeconds可参与组合WhenAll(tasks)全部完成后返回聚合任务同时加载多个资源全部就绪再进游戏WhenAny(tasks)任意一个完成即返回竞速下载、超时控制配合ContinueWith()还能像流水线一样串联任务并通过CoroutineTaskContinuationOptionsOnCompleted / OnFaulted / OnCanceled精确控制什么状态下才执行下一步CoroutineTask.WhenAll(loadTask1, loadTask2) .ContinueWith(() { /* 资源全部就绪进入场景 */ }) .ContinueWith(DoNext(), CoroutineTaskContinuationOptions.OnCompleted | CoroutineTaskContinuationOptions.OnFaulted);源码见 CoroutineTask.cs。五、三类任务到底怎么选结合典型游戏场景给你一套直白的判断规则写一个会产出结果的异步操作下载、计算、读表→ 用AsyncResult带进度就用ProgressResult自己控制执行环境调用方决定等待还是回调需要标准化的执行前/后、成功/失败/结束多阶段回调→ 用AsyncTaskWebGL 项目注意规避需要在主线程组合多个协程步骤、等待多个任务汇聚→ 用CoroutineTaskWhenAllContinueWith是最顺手的组合拳。任务完成后通常需要驱动 UI 刷新。得益于框架的 MVVM 数据绑定你只需在回调或 ContinueWith 中更新 ViewModel 的变量视图会自动同步无需手动找控件。六、附赠支持 C# async/await ✨项目使用 .NET 4.x 或 .NET Standard 2.0 时框架已为IEnumerator、AsyncOperation、IAsyncResult、CoroutineTask等类型扩展了GetAwaiter()可以直接await框架内的异步对象还支持跨 XLua/ILRuntime 的 Lua 侧 async/await 语法写法与 C# 一致。七、相关文档与源码位置 完整官方文档含全部示例与 Lua 版说明docs/LoxodonFramework.md异步组件源码目录Runtime/Framework/Asynchronous/更多实战示例教程场景Samples~/Tutorials中的 Basic Tutorials 场景一句话总结AsyncResult管结果AsyncTask管流程CoroutineTask管组合——按场景取用异步编程不再头疼 。【免费下载链接】loxodon-frameworkLoxodonFramework是一个轻量级的MVVM(Model-View-ViewModel)框架它是专门为Unity3D游戏开发设计的参考了WPF和Android的MVVM设计它提供了视图和视图模型的数据绑定、本地化、一个简单的对象容器、配置文件组件、线程工具组件、应用上下文和玩家上下文异步线程和协程的任务组件等基本组件同时还提供了一个UI视图的框架。所有代码都基于面向对象面向接口的思路设计几乎所有功能都可以自定义。而且在数据绑定部分进行了性能优化避免值类型装箱拆箱最小化垃圾回收的开销使用动态委托/静态织入技术确保数据绑定和直接调用有相当的性能0GC更新UI视图等等它支持绑定到UGUI、UIToolkit和FairyGUI控件同时也很容易扩展对其他UI控件的支持。此外它已经在项目中得到验证UWA评分SSS级可在战斗中完全关闭GC在6、7前手机都保证60FPS性能优越稳定可靠架构清晰可灵活扩展。 我们希望它能够帮助您更快、更轻松地开发游戏。 本框架使用C#语言开发同时也支持使用XLua或者ILRuntime来开发如果项目需要热更新那么只要安装了XLua或者ILRuntime插件则可以完全使用Lua或者ILRuntime来开发游戏。对于新立项的项目建议使用HybridCLR来做热更新。 这个插件兼容 MacOSX,Windows,Linux,UWP,IOS and Android,WebGL等等并且完全开源。项目地址: https://gitcode.com/vovgou/loxodon-framework创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表