多个并发阅读器,无需在C#中使用锁定

编码EZ

我在下面创建了一个示例程序。在该程序中,我希望两件事没有锁

  1. 我必须重写ToString()方法,并且此方法应支持并发阅读器。
  2. 它应该是线程安全的

using System.Collections.Generic;
using System.Linq;

namespace Second.App
{
    class Program
    {
        static void Main(string[] args)
        {
            var sampleClass=new SampleClass();
            sampleClass.AddString("Apple");
            sampleClass.AddString("Orange");
            string allStr =  sampleClass.ToString();
        }
    }
    public class SampleClass:SecondClass
    {
        public override void AddString(string text)
        {
            base.AddString(text);
        }
        public override string ToString()
        {
            return base.ToString();
        }
    }
    public  class SecondClass
    {
        private readonly List<string> _collection = new List<string>();
        public virtual void AddString(string text)
        {
            _collection.Add(text);
        }

        public override string ToString()
        {
            const string delimiter = ",";
            return _collection.Aggregate((i, j) => i + delimiter + j);
        }
    }
}

希望有一些好的答案。

斯图尔特

您可以通过缓存折叠后的字符串来优化单个编写器和多个并发读取器的性能。并发的读者可能会得到一个过时的字符串,但是分配是原子的。但是,如果您有多个作者,则将需要同步。

public  class SecondClass
{
    private readonly List<string> _collection = new List<string>();
    private string _lastFoldedString;
    private const string delimiter = ",";

    public virtual void AddString(string text)
    {
        // You'll need some synchronization type if more than one concurrent writer
        // lock(_collection)
        {
           _collection.Add(text);
           // Or Use String.Join, or just have a running appender
           _lastFoldedString = _collection.Aggregate((i, j) => i + delimiter + j);
        }
    }

    public override string ToString()
    {
        return _lastFoldedString;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 c# windows 应用程序中使用条形码阅读器?

来自分类Dev

在 C# 中使用 XML 阅读器获取嵌套值

来自分类Dev

如何使用 C# 从 USB RFID 阅读器读取

来自分类Dev

C# MySQL 阅读器不读

来自分类Dev

使用C#阅读器读取列中的最后一个值

来自分类Dev

使用SQL数据阅读器C#进行参数化查询

来自分类Dev

C#初学者使用流阅读器读取txt文件

来自分类Dev

使用C#阅读器读取列中的最后一个值

来自分类Dev

如何使屏幕阅读器正确发音C#

来自分类Dev

ASP.NET C#中的XML阅读器

来自分类Dev

在Raspberry Pi上使用NFC阅读器以远程跳过Gnome锁定屏幕

来自分类Dev

使用屏幕阅读器文本的优点

来自分类Dev

使用SQL阅读器读取多行

来自分类Dev

使用MySQL数据阅读器

来自分类Dev

使用JSON隐式阅读器

来自分类Dev

使用SQL阅读器读取多行

来自分类Dev

正确使用csv阅读器功能

来自分类Dev

C# 多行和多列电子邮件阅读器提取器

来自分类Dev

在Android应用中使用zxing扫描条形码阅读器数据

来自分类Dev

如何在Servant中使用通用身份验证访问阅读器monad

来自分类Dev

在Debian 10 Buster中使用肉桂桌面设置默认的pdf阅读器

来自分类Dev

使用多个阅读器时出现间歇性错误

来自分类Dev

多个图像文件并使用文件阅读器进行预览

来自分类Dev

C#无效的尝试在关闭阅读器时调用Read

来自分类Dev

C#流阅读器ReadToEnd()缺少最后一个字符

来自分类Dev

C# - 浏览文件夹和二进制阅读器

来自分类Dev

C# MySQL 阅读器错误 - “Sql 语法错误”

来自分类Dev

C# 时间戳零值无法在我的阅读器中读取

来自分类Dev

我使用的阅读器是否错误,或者阅读器的值为空?

Related 相关文章

热门标签

归档