创建线程以将其转让给它的价值-错误的结果 [英] Creating threads to the transfer to it value - wrong result

查看:63
本文介绍了创建线程以将其转让给它的价值-错误的结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我在创建线程以将值传递给它时遇到问题
然后添加从sqlserver获取数据的过程.
您能帮我传送到线程的值发生什么情况吗?

看吧

如果我通过简单的操作运行我的代码,则使用Task.Factory.StartNew(()=> Sync(lx,i)-获得正常结果(我的theats写正确发送数据).
线程= 1个数据.Count = 100
线程= 2个数据.计数= 100
线程= 3个数据.计数= 100
线程= 4个数据.计数= 100

但是当我使用sqlserver添加同步代码时(SqlConnection con = new SqlConnection(ConnectWeb))

我收到错误的数据
线程= 1个数据.Count = 100
线程= 4个数据.Count = 0
线程= 4个数据.Count = 0
线程= 4个数据.Count = 0
为什么会发生?

Hi all,

I have a problems with creating threads to the transfer to it value
Then I add procedure with getting data from sqlserver.
Can you help me whats happens with values that i transmit to the thread?

Lets look.

Im use Task.Factory.StartNew(() => Sync(lx, i) if Im running my code with simple operations - get normal result (my theads writing right sending data. 
Thread=1 data.Count=100
Thread=2 data.Count=100
Thread=3 data.Count=100
Thread=4 data.Count=100

But when I add at Sync code with using sqlserver (SqlConnection con = new SqlConnection(ConnectWeb))

I getting wrong data
Thread=1 data.Count=100
Thread=4 data.Count=0
Thread=4 data.Count=0
Thread=4 data.Count=0
Why its happens?

我的代码:

       私有无效Sync(List< Treaty> lx,int pp)
        {
            int k = pp;
            Console.WriteLine("Thread = {0} data.Count = {1}",k,List< Treaty> .Count);                
           使用(SqlConnection con = new SqlConnection(ConnectWeb))
            {               
               试试
                {
                    con.Open();
                    foreach(条约x in lx)
                    {
                        TreatyWebBank w = wbAccessor.FindTreatyPacket(con,x.TreatyId,x.SystemBKI,x.NamePacket);
                }
                catch(异常例外)
                {
                    Console.WriteLine(ex.Message);
                   扔前;
                }
            }          
        }

        public void SetWebBankPact(DateTime datfrom,DateTime datinto)
        {
... 
                  Console.WriteLine("k = {0}",k);                
                  while(lx.Count> 0)
                  {                           
                    taskList.Add(Task.Factory.StartNew(()=> Sync(lx,i)));
 //                  Thread.Sleep(10000);
                    i ++;
                 }
...

        private void Sync(List<Treaty> lx, int pp)
        {
            int k = pp;
            Console.WriteLine("Thread={0} data.Count={1}", k, List<Treaty>.Count);                
            using (SqlConnection con = new SqlConnection(ConnectWeb))
            {                
                try
                {
                    con.Open();
                    foreach (Treaty x in lx)
                    {
                        TreatyWebBank w = wbAccessor.FindTreatyPacket(con, x.TreatyId, x.SystemBKI, x.NamePacket);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    throw ex;
                }
            }           
        }

        public void SetWebBankPact(DateTime datfrom, DateTime datinto)
        {
... 
                 Console.WriteLine("k={0}", k);                
                 while (lx.Count > 0)
                 {                            
                   taskList.Add(Task.Factory.StartNew(() => Sync(lx, i)));
 //                   Thread.Sleep(10000);
                   i++;
                 }
...

推荐答案

当我推荐line

这篇关于创建线程以将其转让给它的价值-错误的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆