某些特殊情况下,为了不卡住当前主线程,需要把一些耗时、不需要同步执行的操作放到另外一个线程中执行,比如:文件下载、服务器请求处理等。那么如何在lua中实现异步呢?xlua为我们提供了工具类。
C#测试代码
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
using UnityEngine.UI;
/*
* Author:W
* Lua异步调用测试
*/
public class LuaAsyncTest : MonoBehaviour {
private LuaEnv luaEnv;
/// <summary>
///
/// </summary>
void Awake()
{
luaEnv = new LuaEnv();
luaEnv.DoString("require 'LuaAsyncTest'");
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnDestroy()
{
if (luaEnv != null)
luaEnv.Dispose();
}
}
Lua代码
--引入xlua工具
local util = require 'xlua.util'
--封装异步API
local function Method()
print('异步调用 Methoid:')
end
local AsyncMethod = util.async_to_sync(Method)
--供外界API
CS.UnityEngine.GameObject.Find("Button"):GetComponent("Button").onClick:AddListener(util.coroutine_call(AsyncMethod))
执行结果如下
注意:
缺了util.coroutine_call,会报错如下