gpt4 book ai didi

c# - 队列中有新项目时如何出队

转载 作者:太空狗 更新时间:2023-10-30 00:31:38 25 4
gpt4 key购买 nike

我有一个使用带有字符串的队列的应用程序(对应于应用程序需要执行的不同任务)。在随机的时刻,队列可能会充满字符串(有时一分钟几次,但也可能需要几个小时。

直到现在,我总是有一个计时器每隔几秒检查一次队列中是否有项目并将其删除。

我认为一定有比这种方式更好的解决方案。当一个项目被添加到队列时,有什么方法可以得到一个事件吗?

最佳答案

是的。看看TPL Dataflow ,特别是 BufferBlock<T> ,它或多或少与 BlockingCollection 相同没有通过利用 async/await 阻塞你的线程的讨厌的副作用.

所以你可以:

void Main()
{
var b = new BufferBlock<string>();
AddToBlockAsync(b);
ReadFromBlockAsync(b);
}

public async Task AddToBlockAsync(BufferBlock<string> b)
{
while (true)
{
b.Post("hello");
await Task.Delay(1000);
}
}

public async Task ReadFromBlockAsync(BufferBlock<string> b)
{
await Task.Delay(10000); //let some messages buffer up...
while(true)
{
var msg = await b.ReceiveAsync();
Console.WriteLine(msg);
}
}

关于c# - 队列中有新项目时如何出队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24064920/

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