gpt4 book ai didi

c# - 关于处理从线程抛出的对象的事件的问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:20:10 24 4
gpt4 key购买 nike

我有一个类,ProcessorClass。它有两个方法 Start() 和 Stop()。当您点击开始时,它会在内部创建一组线程来执行一些处理,如果它们找到相关内容,则会触发一个事件。

我的窗体 frmMain(这是一个 Windows 窗体应用程序 .net 3.5)有一个此类的实例并且正在捕获这些事件。每次捕获事件时,都会将某些内容插入数据库。我得出的结论是该策略将确保同步插入是否正确?我不能让多个线程尝试执行数据操作,因为那样会导致我丢失数据。

最佳答案

不,这些不会是同步插入,尤其是在多核机器上。我建议不要回到单线程或锁定内存中的某个对象,而是将并发处理放在数据库更新中。您可以在不锁定数据库的情况下执行此操作,方法是使用 WHERE 子句检查执行更新的同一语句中的旧值。如果结果插入了零行,则并发检查使您免于数据损坏。

但是,如果您没有适用于您的业务规则的重试机制,则需要将并发规范添加到您的数据库事务中。 (即,打开一个事务,将其附加到您的命令,并将事务并发级别设置为您需要的安全级别)。

关于c# - 关于处理从线程抛出的对象的事件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427566/

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