首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在填充队列的同时打印队列?

如何在填充队列的同时打印队列?
EN

Stack Overflow用户
提问于 2021-02-25 09:08:37
回答 1查看 60关注 0票数 1

我目前正在用消息填充队列系统。当新消息开始传入时,应该有一个单独的线程打印队列。问题是我的程序不能工作。

代码语言:javascript
复制
private static void pData(IWebDriver driver)
{
    Queue<string> messageToSend = new Queue<string>();

    Thread printThread = new Thread(new ParameterizedThreadStart(PrintQueueMessages));
    printThread.Start(messageToSend);

    while (true)
    {
        messageToSend.Enqueue(GetLastElement(driver).Text));
    }
}

private static void PrintQueueMessages(object messageQueue)
{
    //Wont let me cast messageQueue as queue. 
}

我只想要一种简单而干净的方式来打印我的队列,因为我的while循环填满了我的队列。此外,队列系统应该继续等待消息,它应该永远不会停止等待消息和打印消息。

请注意:队列系统应该在自己的时间内工作。当消息进来时,它应该打印出来。

EN

回答 1

Stack Overflow用户

发布于 2021-02-25 09:23:16

我将建议一种完全不同的方法,而不是BCL队列,(在本例中) Unbounded Channel将是一个很好的选择

优点是

在多线程environment.

  • It中工作时,您不必同步队列和工作负载以及永久的while循环它将处理多线程和等待模式( cancellable

  • It's completable

  • and )它使用(并且将很好地处理)异步和等待模式和IO工作负载。

给定的

代码语言:javascript
复制
private static Channel<string> _channel;

public static async Task ReaderAsync(CancellationToken cancellationToken)
{
   // read from the channel until complete
   await foreach (var message in _channel.Reader.ReadAllAsync(cancellationToken))
      Console.WriteLine("New message : " + message);

   Console.WriteLine("Finished");
}

测试

代码语言:javascript
复制
var ts = new CancellationTokenSource();

_channel = Channel.CreateUnbounded<string>();

// start the reader task
var task = ReaderAsync(ts.Token);

// post some junk to the channel, this can be on a different thread
for (var i = 0; i < 10; i++)
{
   // some delay for the fun of it
   await Task.Delay(10, ts.Token);
   // write to the channel
   await _channel.Writer.WriteAsync(i.ToString(), ts.Token);
}

 // complete it when and if you are finished
_channel.Writer.Complete();

// just awaiting completion for this demo
await task;

Console.WriteLine("Game over");

输出

代码语言:javascript
复制
New message : 0
New message : 1
New message : 2
New message : 3
New message : 4
New message : 5
New message : 6
New message : 7
New message : 8
New message : 9
Finished
Game over
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66361043

复制
相关文章

相似问题

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