2个异步任务之间共享的类变量

时间:2019-03-30 00:15:20

标签: c# asynchronous discord.net

我正在尝试为Discord Server创建Discord.Net机器人。我希望Bot在命令之间共享数据,但是目前由于异步任务的性质,随着在每个任务上创建新实例,类变量将重置为null。我想知道其他Discord Bot如何处理这个问题。

我知道我能够将值保存到文件/数据库中,但是我希望使用更简单的方法来允许多个并发命令。

using Discord.Commands;
using System.Threading.Tasks;

namespace UsefulDiscordBot.Modules
{
    public class Foo : ModuleBase<SocketCommandContext>
    {
        string test;

        [Command("initializeString")]
        public async Task initializeString()
        {
            test = "Initialized";
        }

        [Command("addToString")]
        public async Task addToString([Remainder]string s)
        {
            test += s;
        }

        [Command("printString")]
        public async Task printString()
        {
            await ReplyAsync(test);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

Discord.Net中的命令模块是瞬态的(它们在需要时产生,一旦执行便丢弃)。就是说,您想要实现的一般最佳实践(当使用Discord.Net构建机器人时)是使用Service-类来将数据存储在命令模块外部。

您可以通过Discord.Net documentation阅读有关如何执行此操作的信息。常见问题解答(链接)中有专门针对此的部分。希望对您有所帮助。

答案 1 :(得分:-3)

我不知道您想对机器人做什么,但是您可以查看静态类的静态属性。

示例:

public static class SystemData
{
    public static int Attribute1;
    public static string Attribute2;
    public static DateTime Attribute3;
}

请记住,如果这些数据在用户之间共享,则不能使用静态属性,请考虑使用数据库。

如果您不知道静态属性的工作原理,请查看Static Attributes