このプログラムは、サイトに行を投稿するメッセージ ポスター アプリケーションです。高速である必要があるため、マルチスレッドを使用する必要がありました。同じ行を取る 2 つのスレッドの確率が可能になります。どうすれば回避できますか? 上記で想定していること以外は、同じIDで投稿された最大11行を見て、これは不可能です...
私が行を取っている方法は次のとおりです:
1- データベースからデータセットを作成....
2-カウンターを作成します、rowCounter = 0
while (rowCounter < allPostingRows.Tables[0].Rows.Count)
{
// Take rows, and increment rowcounter++
// Takes row according to row counter....
// get the value from the fields in dataset and run the function:
postFunction(userName, pass, postUrl, rowCounter, worker, postTitle, postText, postTxtSnippet, groupID, dbID, postON, groupName, groupUrl);
}
したがって、開始時にこれを実行するために 100 個のスレッドがあると言うと、100 個のスレッドがこのコードに入り、それぞれ行を取り、投稿し、スレッドが投稿して空いているときに をチェックしrowcounter
、別の行を取ります。
だから私は上記のロジックを使用して、スレッドに異なる行を与えています.他の方法を考えられなかったので、このアプローチは悪いですか! また、複数のスレッドが同じ行を取ると仮定すると、どうすれば修正できますか?
アップデート
私が考えることができる1つの解決策は、すべての作業が完了した後にランダムな遅延を置くことであり、スレッドは新しい行を取得するのに役立ちますか?
以下のユーザーからの回答後に更新:
したがって、私のコードは次のようになります。
private Object thisLock = new Object();
lock (thisLock)
{
while (rowCounter < allPostingRows.Tables[0].Rows.Count)
{
// Take rows, and increment rowcounter++
// Takes row according to row counter....
// get the value from the fields in dataset and run the function:
postFunction(userName, pass, postUrl, rowCounter, worker, postTitle, postText, postTxtSnippet, groupID, dbID, postON, groupName, groupUrl);
}
}