如何解决C#.Net 框架中 BlockingCollection 的问题 用户类主程序输出观察
设置
实验
我正在尝试使用 C# 的 BlockingCollection
来实现这一点。这是示例
用户类
class EachUserClass
{
public EachUserClass()
{
id = incrementer++;
Task.Run(() => StartProcessing());
}
private static int incrementer = 0;
private int id = 0;
BlockingCollection<string> collection = new BlockingCollection<string>();
public void StartProcessing()
{
while (true)
{
var incoming = "";
if (collection.TryTake(out incoming,800))
{
//
}
else
{
if(id == 99)
Console.WriteLine( DateTime.Now.ToString() + " - Timeout on " + id);
}
}
}
}
主程序
static void Main(string[] args)
{
Console.WriteLine("App started at: " + DateTime.Now.ToString());
for (int i = 0; i < 100; i++)
{
new EachUserClass();
}
Console.ReadKey();
}
输出
App started at: 16-04-2021 15:45:37
16-04-2021 15:47:08 - Timeout on 99
16-04-2021 15:47:09 - Timeout on 99
16-04-2021 15:47:10 - Timeout on 99
观察
您可以看到 AppStart 和向第 99 个用户发送超时之间存在巨大延迟。这是因为我试图在线程池上快速连续地启动 100 个任务。
任何建议异步运行它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。