首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Discord.NET等待外界命令

Discord.NET等待外界命令
EN

Stack Overflow用户
提问于 2016-10-23 19:05:49
回答 2查看 2.6K关注 0票数 1

我正在编写不和谐的机器人程序,我遇到了一个大问题。我正在编程RPG机器人,所以我需要写玩家的HP和敌人的hp真的经常,所以我做了一个功能。

代码语言:javascript
复制
private void showHP(CommandEventArgs e)
{
    client.ExecuteAndWait(async() =>
    {
        await e.Channel.SendMessage(userInside + " - " + player.HP);
    });
}

CommandEventArgs e来自命令函数,因为我需要访问执行该命令的通道。

代码语言:javascript
复制
commands.CreateCommand("attack").Do(async (e) =>
{
    await e.Channel.SendMessage("You have attacked");
    showHP(e);
}

一切似乎都很顺利..。直到它被执行。整个机器人都在不停地等待,所以我想我错误地使用了异步和等待命令。如果我根本不使用它们,那么消息就会陷入超时。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-23 20:24:41

如果您想遵循正确的异步模式,那么按照以下步骤修改代码:

代码语言:javascript
复制
private Task showHP(CommandEventArgs e)
{
    return e.Channel.SendMessage($"{userInside} - {player.HP}");

}

并按以下方式进行呼叫:

代码语言:javascript
复制
commands.CreateCommand("attack")
            .Do(async (e) =>
            {
                await e.Channel.SendMessage("You have attacked");
                await showHP(e);
            }

创建一个以异步方式运行函数的任务,而不等待该任务是无用的,只需调用异步函数而不等待并返回该任务,它将防止任务规划者在不同的上下文切换上拆分代码。

票数 1
EN

Stack Overflow用户

发布于 2016-10-23 19:25:47

client.ExecuteAndWait()阻止调用上下文,直到父DiscordClient断开连接(在您的情况下是client)。

这不是创建异步上下文的正确方法--最简单的方法是将代码包装在Task.Run中,如下所示:

代码语言:javascript
复制
private void showHP(CommandEventArgs e)
{
    Task.Run(async () => {
        await e.Channel.SendMessage($"{userInside} - {player.HP}");
    });
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40206742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档