【问题标题】:C# Threading - One thread adds to list\datatable whilst another removes [duplicate]C# 线程 - 一个线程添加到 list\datatable 而另一个删除 [重复]
【发布时间】:2015-10-19 12:11:44
【问题描述】:

我需要一个列表或集合,甚至是数据表。我想要一个进程将 STRING 添加到此列表中。 (这可以是用户单击按钮)而线程在后台不断运行并处理和删除列表中的字符串。

简而言之,每当我将项目添加到列表\数据表或其他任何内容时,都必须对其进行处理,因为添加它们的过程比实际处理它们要快得多。

关于最好的方法有什么建议吗?

【问题讨论】:

  • 除了现有的各种并发集合之外,您还可以使用 ActionBlock 使用单个类来完成所有这些操作
  • 您的收藏是 FIFO 的吗?如果是这样,那么我建议使用ConcurrentQueue<T>
  • 通过基础研究很容易找到,例如搜索“线程安全列表 wpf”
  • @jgauffin 这不是 OP 所要求的。事实上,大多数答案都是不合适的,因为它们涉及 async/await 或 Invoke,这些都与经典的生产者/消费者问题无关

标签: c# multithreading


【解决方案1】:

这是随ActionBlock 类开箱即用提供的。您发布到区块的任何内容都会由您在创建区块时提供的 lambda 进行排队和处理:

var myBlock = new ActionBlock<string>(data=>
{ 
        Console.WriteLine(data);
});
...
myBlock.Post("some string");

ActionBlock 是 TPL DataFlow Library 的一部分,可用作 NuGet package

请注意,.NET 有许多并发集合(例如 ConcurrentQueue、BlockingCollection)和处理模型(任务、PLINQ、数据流、反应式)。你问的是对“生产者/消费者”问题的粗略描述。每种可用的技术都可以用来解决它,但有些技术比其他技术更容易使用,取决于问题的上下文

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2014-12-15
    • 2011-02-17
    • 2022-01-09
    相关资源
    最近更新 更多