创建线程以将其转让给它的价值-错误的结果 [英] Creating threads to the transfer to it value - wrong result
问题描述
大家好,
我在创建线程以将值传递给它时遇到问题
然后添加从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屋!