私はよくデータリーダーにデータを入力し、このように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 を作成する方法を理解するのを手伝ってくれる人はいますか?
どのクラスがスレッドセーフかどうかをどのように知ることができるかという別の質問。スレッドセーフとはどういう意味ですか。ある人は、datareader はスレッドセーフではないと言いました。彼がどのように知っているか。
タスク並列ライブラリを使用する必要がある場合の別の質問。ガイドしてください。ありがとう