gpt4 book ai didi

c# - EF上下文和多线程

转载 作者:行者123 更新时间:2023-11-30 18:01:52 24 4
gpt4 key购买 nike

我想知道是否有人向我解释我的代码中有什么问题。我在额外的线程中运行计时器。在计时器功能中,我使用 EF 上下文。我看到定时器功能已经工作了 6 次,我特别将间隔设置为 3 秒并且只占用 100 行但在我的数据库中我只看到一个工作。那么我的错误在哪里呢?

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
private static int cnt = 0;
private Thread thread;

public Form1()
{
InitializeComponent();
}

private void StartThread()
{
var timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(ProcessDb);
timer.Interval = 3000;
timer.Start();
}

public void ProcessDb(object sender, System.Timers.ElapsedEventArgs e)
{
cnt++;
ConnService serv = new ConnService();
serv.UpdateConnections(cnt);
}

private void button1_Click(object sender, EventArgs e)
{
thread = new Thread(StartThread);
thread.Start();

Thread.Sleep(20000);
}
}

public class MyqQueue
{
public static Stack<int> myStack = new Stack<int>();
public static Stack<int> myStack2 = new Stack<int>();
}
}

namespace WindowsFormsApplication2
{
class ConnService
{
public ConnService()
{
cnt++;
}

private static int cnt;
public void UpdateConnections(int second)
{
MyqQueue.myStack.Push(second);

DjEntities ctx = new DjEntities();
var entities = ctx.Connections.Take(100).Where(c => c.State == null);
foreach (var connection in entities)
{
connection.State = second;
}
if (second == 1)
Thread.Sleep(7000);

MyqQueue.myStack2.Push(second);
ctx.SaveChanges();
}
}
}

最佳答案

 ctx.Connections.Take(100).Where(c => c.State == null)

应该改为

 ctx.Connections.Where(c => c.State == null).Take(100)

您的第一个查询转换为先取 100 个而不进行过滤,然后应用过滤器。

我编写的第二个查询将过滤项目,然后进入前 100。

关于c# - EF上下文和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8628958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com