FiveM中异步Task<bool>函数返回值异常的C#问题
FiveM技能检查Export返回类型错误修复方案
问题根源
你在注册Export时错误地将StartGame方法包装成了Task<bool>实例,而FiveM的RegisterExport需要的是返回Task<bool>的方法委托,不是已实例化的Task对象,导致类型不匹配报错。
修正步骤
1. 修正Export注册代码
直接传入StartGame方法委托,无需手动包装Task:
public ClientMain() { // 直接传方法名,不用new Task<bool>(StartGame) RegisterExport("startGame", StartGame); RegisterNuiCallbackType("finish"); EventHandlers["__cfx_nui:finish"] += Finish; }
2. 简化StartGame的返回逻辑
异步方法(async)会自动将返回值封装为Task<T>,无需额外创建Task:
private async Task<bool> StartGame() { gameStarted = true; SendNuiMessage(@"{""startGame"":true, ""number"": 4}"); SetNuiFocus(true, true); Debug.WriteLine("Game started"); while (gameStarted) { await Delay(100); } // 直接返回bool值,async方法自动转为Task<bool> return gameWon; }
3. 确保Finish回调正确更新状态
需要在NUI回调里重置游戏状态,否则StartGame会一直卡在循环里:
private void Finish(ExpandoObject data, CallbackDelegate callback) { var dataDict = data as IDictionary<string, object>; // 从NUI返回的参数中获取是否成功 gameWon = (bool)dataDict["success"]; gameStarted = false; SetNuiFocus(false, false); callback(null); }
关键说明
FiveM的Export系统支持异步方法,只要你的方法返回Task<T>,直接注册方法委托即可,不需要手动创建Task实例。之前的错误是因为你把方法包装成了Task对象,而非传递方法本身的委托引用。
内容的提问来源于stack exchange,提问作者Adzeiros
相关产品推荐
相关产品推荐

