首页 / C# / 在c#字典中引用异步任务
在c#字典中引用异步任务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在c#字典中引用异步任务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2023字,纯文字阅读大概需要3分钟。
内容图文
我现在遇到了几个程序中字典中异步任务的问题,我无法解决如何解决问题.
我有一个异步任务,如下所示:
MessageEventArgs.Channel.SendMessage("somestring");
MessageEventArgs是第三方库中的一个类,我在程序开始时静态声明:
public static MessageEventArgs meargs;
程序侦听IRC通道中的事件,并根据文本命令执行操作.我没有为每个命令设置一个巨大的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直到之后才被实例化,因此它会抛出异常.有没有办法在字典中存储对这些函数的引用?我找到了使用委托的解决方案,但它们似乎不适用于void方法,异步方法(据我所知)只能返回void或Task.
提前致谢!
解决方法:
如果我写这篇文章,我会创建一个带有虚拟ExecuteCommand函数的IrcCommand类.然后为我希望能够运行的每个不同命令创建一个子类.每个子类都将使用调用命令所需的逻辑覆盖ExecuteCommand函数. ExecuteCommand可以接受与Channel相对应的Channel类型的参数来调用该命令.
在启动时,我会创建一个Dictionary< string,IrcCommand>填充了命令文本的Key,以及实现该命令的子类的新实例的Value.
当一个命令进来时,我会用匹配的键从字典中拉出IrcCommand实例,并在其上调用ExecuteCommand函数,传入Channel接收到的命令.
它可能会发生这样的事情.我实际上没有打开visual studio来验证我的语法,所以我可能在这里有一些错误.
一些命令的实现:
public class ExampleCommand : IrcCommand
{
public override void ExecuteCommand(Channel channel)
{
channel.SendMessage("Hello World");
}
}
public class DisconnectCommand : IrcCommand
{
public override void ExecuteCommand(Channel channel)
{
channel.Disconnect();
}
}
在应用程序启动时注册命令:
private void RegisterCommands()
{
_commands.add("!example", new ExampleCommand());
_commands.add("!disconnect", new DisconnectCommand());
}
收到时执行命令:
_commands(commandText).ExecuteCommand(e.channel);
内容总结
以上是互联网集市为您收集整理的在c#字典中引用异步任务全部内容,希望文章能够帮你解决在c#字典中引用异步任务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。