You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:15:40