ポストバックを実行し、外部データベースに接続してデータをダウンロードし、データベースの更新を実行するボタンのある Web ページがあります。私が抱えている問題は、2 人以上の人がこのダウンロードを同時に実行するか、機能がまだ実行されている間に実行され、問題が発生する可能性があることです。
2 番目の人がボタンをクリックすると、現在更新中であるというメッセージが表示されるように、何らかの形式のセマフォを作成するにはどうすればよいですか?
外部データベースで適切なトランザクションを使用し、必要に応じて行ロックを適用します。DBシステムは同時実行性を適切に処理する必要があります。
一見したところ、lock ステートメントで囲まれた ASP.NET アプリケーション変数を使用して、必要に応じて変数をチェックおよび更新します。
protected void Page_Load(object sender, EventArgs e)
{
if (!GetSem_SomeoneIsDownloading())
{
PerformDownload();
ClearSem_SomeoneIsDownloading();
}
else
{
DisplayMessageSomeoneIsDownloadingAlready();
}
}
bool GetSem_SomeoneIsDownloading()
{
bool isSomeoneDownloading;
Application.Lock();
isSomeoneDownloading = (bool)(Application["SomeoneIsDownloading"] ?? false);
if (!isSomeoneDownloading)
Application["SomeoneIsDownloading"] = true;
Application.UnLock();
return isSomeoneDownloading;
}
void ClearSem_SomeoneIsDownloading()
{
Application.Lock();
Application["SomeoneIsDownloading"] = false;
Application.UnLock();
}