c# 多线程 读取 app.config 的时候 ,出现被使用怎么处理?

 我来答
百度网友8d17b9d
推荐于2016-11-09 · TA获得超过280个赞
知道小有建树答主
回答量:161
采纳率:100%
帮助的人:180万
展开全部

这个得加锁,不然就会出现这个问题。

 

假设我在App.Config文件中添加以下数据:

<appSettings>
  <add key="hello1" value="Hello World 1"/>
  <add key="hello2" value="Hello World 2"/>
</appSettings>

然后我们开10个线程同时读取这两条数据,5个线程读取hello1,5个线程读取hello2的值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Configuration;
namespace ReadWriteOneFileSync
{
    class Program
    {
        protected ReaderWriterLockSlim _readwriteLock = new ReaderWriterLockSlim();
        static void Main(string[] args)
        {
            Program prog = new Program();
            for (int i = 0; i < 10; i++)
            {
                string key = "hello" + (1 + (i % 2)).ToString();
                Thread t = new Thread(prog.ReadFromConfiguration);
                t.Start(key);
                t.Join();
            }
            Console.ReadLine();
        }
        public void ReadFromConfiguration(object key)
        {
            _readwriteLock.EnterReadLock();
            string value = String.Empty;
            try
            {
                value = ConfigurationSettings.AppSettings[key.ToString()].ToString();
                Console.WriteLine(value);
            }
            finally
            {
                _readwriteLock.ExitReadLock();
            }
        }
    }
}

 输出结果:

Hello World 1
Hello World 2
Hello World 1
Hello World 2
Hello World 1
Hello World 2
Hello World 1
Hello World 2
Hello World 1
更多追问追答
追问
你介绍的情况是 多线程读取写 同一条配置 ,我遇到的情况是读取的是 不同的appsetting .
追答
其实这个例子也是读取多条数据的, hello1和hello2,不同的线程度去不同的值, 你可以把你的AppSettings的结构贴出来。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式