gpt4 book ai didi

c# - 在 C# 字典中引用异步任务

转载 作者:太空狗 更新时间:2023-10-30 01:02:11 27 4
gpt4 key购买 nike

我现在在几个程序中遇到了有关字典中异步任务的问题,但我不知道如何解决它。

我有一个看起来像这样的异步任务:

MessageEventArgs.Channel.SendMessage("somestring");

MessageEventArgs 是我在程序开始时静态声明的第 3 方库中的一个类:

public static MessageEventArgs meargs;

该程序监听 IRC channel 中的事件并根据文本命令执行操作。我不想为每个命令都有一个巨大的 switch 语句,而是想制作一个将字符串与方法匹配的字典。并不是所有的都只是发送消息,所以我不能只存储要发送的字符串。它看起来像这样:

public static Dictionary<string, Task> myDict= new Dictionary<string, Task>()
{
{"!example", MessageEventArgs.Channel.SendMessage("HelloWorld") }
}

在 Main() 中,我调用:

MessageReceived += async (s,e) => 
{
meargs = e;
await myDict[e.Message.Text];
}

我逐渐意识到,当字典被实例化时,它会尝试调用 SendMessage,因为它是一个异步任务。 MessageEventArgs 直到之后才被实例化,因此它会抛出异常。有没有办法将对这些函数的引用存储在字典中?我找到了使用委托(delegate)的解决方案,但它们似乎不适用于 void 方法,并且 async 方法(据我所知)只能返回 void任务

提前致谢!

最佳答案

不是立即创建任务,而是存储工厂:

public static Dictionary<string, Func<Task>> myDict= new Dictionary<string, Func<Task>>()
{
{"!example", () => MessageEventArgs.Channel.SendMessage("HelloWorld") }
}

await myDict[e.Message.Text]();

关于c# - 在 C# 字典中引用异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34797039/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com