0

ポストバックを実行し、外部データベースに接続してデータをダウンロードし、データベースの更新を実行するボタンのある Web ページがあります。私が抱えている問題は、2 人以上の人がこのダウンロードを同時に実行するか、機能がまだ実行されている間に実行され、問題が発生する可能性があることです。

2 番目の人がボタンをクリックすると、現在更新中であるというメッセージが表示されるように、何らかの形式のセマフォを作成するにはどうすればよいですか?

4

2 に答える 2

2

外部データベースで適切なトランザクションを使用し、必要に応じて行ロックを適用します。DBシステムは同時実行性を適切に処理する必要があります。

于 2012-06-20T08:24:12.333 に答える
0

一見したところ、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();
}
于 2012-06-20T08:28:11.773 に答える