我经常用数据填充数据阅读器并像这样填充 UI
using (SqlConnection conn = new SqlConnection("myConnString"))
using (SqlCommand comm = new SqlCommand("Select * from employee where salary<5000", conn))
{
conn.Open();
SqlDataReader reader = comm.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
// here i populate my employee class
}
}
// here i update UI
}
我正在使用 DataReader 搜索 Task Parallel 库的使用,并找到了一段代码。它看起来不错,但目标对我来说不是很清楚。所以这是我得到的代码。
public IEnumerable<MyDataClass> ReadData()
{
using (SqlConnection conn = new SqlConnection("myConnString"))
using (SqlCommand comm = new SqlCommand("myQuery", conn))
{
conn.Open();
SqlDataReader reader = comm.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
yield return new MyDataClass(... data from reader ...);
}
}
}
}
打电话
Parallel.ForEach(this.ReadData(), data =>
{
// Use the data here...
});
或者
this.ReadData().AsParallel().ForAll(data =>
{
// Use the data here...
});
我如何从ForAll获取数据。
谁能帮我理解它的工作原理以及如何从ForAll获取数据以及如何从ForAll填充我的 UI的代码片段。
另一个问题是我怎么知道哪个类是线程安全的。这是什么意思线程安全。有人说数据读取器不是线程安全的。他怎么知道。
何时应该使用任务并行库的另一个问题。请指导。谢谢