【发布时间】:2019-07-29 01:40:10
【问题描述】:
对不起,如果标题不完全正确,不是 100% 确定我在找什么。
我有一些代码执行以下操作:
public static ProcessData()
{
AddNewData()
GetAllData()
BuildTSV();
Send();
}
这是一个 MVC Web 应用,ProcessData 是一个 Ajax 调用,传入一些表单数据。 AddNewData 写入数据库,这是对执行基本 INSERT 的存储过程的简单调用。 GetAllData 查询数据库,这是对单个表的简单 SELECT 语句。 BuildTSV 使用 db 数据构造一个文件,然后我们将它发送到远程服务器。
如果 BuildTSV 连续命中足够快,我会遇到文件锁定问题(而不是数据库)。 BuildTSV 使用了一个简单的 StreamWriter。
我无法更改此工作流程,我想以某种方式汇集 AddNewData() 调用,然后仅在它们全部完成后继续。
线程?排队?阻止集合?等待文件是否被锁定,然后重试?
这对我来说是全新的,并且很难理解 1001 种不同的方法。
【问题讨论】:
-
“我想以某种方式汇集 AddNewData() 调用,然后仅在它们全部完成后继续。” - 即使你这样做,会发生什么当你决定他们都完成了,但又来了一个?还是两个?我认为您接受此数据的方法可能不正确。如果没有
AddNewData和GetAllData的实现,我不能肯定。 -
AddNewData 是对存储过程的简单调用,只不过是直接插入。 GetAllData 与选择数据相同。单表,几列。
-
如果是简单的INSERT,锁问题是从哪里来的?
-
在 BuildTSV 中。我必须从表中提取数据并将其作为 TSV 上传到远程服务器。在构建 TSV 时,如果第二个请求足够快,文件就会被锁定。
-
您是否必须每次都在相同的文件位置写入 TSV,还是每次调用都使用一个唯一的临时文件?
标签: c# .net multithreading model-view-controller locking