我正在将我的代码剥离到我可以得到的最基本的代码,但仍然会导致问题。
public void SomeMethod()
{
CompanyList allCompanies = GetAllCompanies();
foreach (Company x in allCompanies)
{
List<string> warnings = x.GenerateWarnings();
}
}
public class Company
{
public string CompanyCode { get; set; }
public List<string> GenerateWarnings()
{
List<string> warnings = new List<string>();
using (OleDbConnection conn = new OleDbConnection(connstring)) //ms access database
{
conn.Open();
//do lots of stuff here, but commented out, still causes a problem
//basically making some database calls to confirm that an expected
//value is actually in the table. List<string> warnings is then
//populated based on the results of these calls.
conn.Close();
}
return warnings;
}
}
所以发生的事情是,假设通过 allCompanies 的第一个循环是 CompanyCode 0001 的 Company。当我单步执行代码时,正如预期的那样,我到达 Company 的 GenerateWarnings() 代码。但是,当我到达 conn.Open() 时,下一步是针对 CompanyCode 0002 到达 GenerateWarnings() 的公司。然后我的下一步是再次使用 CompanyCode 0001,到达 conn.Close()。这种公司实例之间的跳跃在 allCompanies 的整个 foreach 循环中进行。这不是一个一致的模式,有时它会跳来跳去,就像一家公司会打开,然后关闭,然后继续执行其余代码,然后随机我的下一步将是 conn.Close() 某些公司像 20 步前一样运行 conn.Open() 。
我没有指定任何花哨的东西,比如多线程和异步的东西或类似的东西,所以我对为什么会发生这种情况有点困惑。我想...
- A) 了解发生这种情况的原因和
- B)知道如何阻止它跳来跳去
编辑:我发现这可能与它是一个 MS Access 数据库有关。当我运行该页面时,快速打开 Access 文件时创建的 .ldb 不断出现和消失。
编辑2:这对我来说真的很奇怪。我在整个过程中插入了一些快速的单行语句,以将 forloop 的进度记录到带有时间戳的文本文件中,这样我就可以确切地看到发生了什么,当我这样做时,文本会按顺序记录每一行,没有跳来跳去。是否将日志添加到文本函数调用就像无意中限制它或其他什么?这有效地解决了我的问题,但我现在比开始时更加困惑。