2

Webページのクリティカルセクションに次のコードを使用しています

if(Monitor.TryEnter(lockObj,60000))
{
  try{
       //write some things to a file
     }
  finally
  {
    Monitor.Exit(lockObj);
  }
}

ここで、lockObjはクラスの静的メンバーです。私の質問は、クリティカルセクションの実行中にユーザーがWebページまたはブラウザを閉じるとどうなるかということです。lockObjは、将来のページ要求のためにロックされたままですか?

4

2 に答える 2

3

リクエストがまだ処理中の場合、ユーザーがブラウザウィンドウを閉じたり、別のページに移動したりしても、自動的には何も発生しません。これがプロパティが存在する理由ですHttpResponse.IsClientConnected-したがって、コードは、何か有用なことを実行できるときに、適切なチェックを実行できます。

サーバー側でタイムアウトが発生した場合、finallyその時点でブロックが動作し、ロックが解除されます。この時点でロックが解放されても安全かどうかは、あなただけが判断できます。何らかの理由でロックがそこに配置されている必要があります。タイムアウトが発生した場合は、(共有、ロックが必要な状態)がないことを意味する場合があります。次にロックを取得する人にとっては安定していません。

しかし、これらは2つの非常に異なる問題のセットです。

于 2012-11-05T11:07:17.890 に答える
0

どういうわけか、内部の実行中のスレッドを強制終了することができます

try {
  //write some things to a file
}

いくつかの問題があるかもしれません。ただし、例外を除いてすべての現実的なケースでは、コードは機能します。

実際には、を避けてくださいThread.Abort

于 2012-11-05T11:00:42.530 に答える