Hun*_*ell 4 .net c# queue console-application
好的,所以我正在开发一个控制台应用程序,每隔3秒从API中提取一次.API返回一个"消息"列表,我需要将其添加到队列中,并在后台持续检查队列中的新项目,循环遍历项目,对项目执行某些操作.
这是我到目前为止: 主程序方法
static void Main(string[] args)
{
ConsoleKeyInfo answer = Console.ReadKey(true);
if (answer.Key == ConsoleKey.Y)
{
while (true)
{
foreach (MessageObject message in messageQueue)
{
SendCommand(message.Message);
// Debug
Console.WriteLine(message.Message);
messageQueue.Dequeue();
}
}
}
else
{
Environment.Exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
CheckChat方法
static private async void CheckChat()
{
Chat chat = await ChatAPI.GetChat(428);
foreach (MessageObject chatMessage in chat.Messages)
{
messageQueue.Enqueue(chatMessage);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.dll
Additional information: Collection was modified after the enumerator was instantiated.
我知道我在循环队列时将项目添加到列表中,但是如何在后台添加对象时如何连续检查队列中的项目?
如果要在修改时枚举它,则需要创建Queue的副本,例如,您可以:
foreach (MessageObject message in messageQueue.ToList())
Run Code Online (Sandbox Code Playgroud)
请注意,在所有情况下,您的队列也应该是一个,ConcurrentQueue因为您正在跨线程执行操作.