私はアプリケーションを整えるのを手伝っています、そしてそれは並行性の問題でいっぱいです。私はそれらを処理しようとしていますが、DataTablesを使用しているセクションに出くわしました。
データテーブル自体は静的であり、多くのスレッド間で共有されます。
dt.Select( "...")を使用すること自体にロックステートメントが必要であることを知っています。そうしないと、データテーブルに行を追加/削除するときに問題が発生します。ただし、その呼び出しが返されると、DataRowオブジェクトの配列があります。
それらを更新する場合は明らかにそれらの行をロックしますが、それらを読んでいるだけの場合は、ロックする必要がありますか?
基本的に、他の場所で新しい行を追加し、既存の行を更新する可能性があることを考えると、次のうち正しいものは次のとおりです。
lock (dtLock)
{
DataRow[] rows = dt.Select("...");
}
foreach(DataRow dr in rows)
{
// read statements only
}
また
lock (dtLock)
{
DataRow[] rows = dt.Select("...");
foreach(DataRow dr in rows)
{
// read statements only
}
}