私はメソッドを実行するエンドポイントを持っています。私は、メソッドが、エンドポイントに複数回ヒットしたときに実行中であることを確実にしたい。既に実行中の場合、エンドポイントがメソッドを実行しないようにする方法
私はスレッドプールなどのどこかに変数を設定できると思いますか?私はこれを調査するためにどうやって行くのか分からない。一部のリードは高く評価されるだろう。
私の例:
namespace Website.Import
{
public class ImportProducts : IHttpHandler
{
private static bool running = false;
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
if (running)
{
throw new Exception("Already running");
}
running = true;
try
{
var repo = new MemoryRepository();
var productImporter = new ProductImporter(repo);
var groupImporter = new GroupImporter(repo);
var discountImporter = new DiscountImporter(repo);
}
finally
{
running = false;
}
context.Response.Write("Done");
}
public bool IsReusable
{
get
{
return true;
}
}
}
}
他の要求にどうするかを?彼らはエラーを返しますか?完了を待ってから自分のターンを取る?完了を待って結果を共有しますか?他に何か? –
文字列メッセージを返すのが理想的ですが、私の場合は正直言って問題ありません。 –
@EvaldasRaisutisあなたはコメントのポイントを見逃しました。問題はありません。あなたが尋ねることは、HTTPのコア動作を乱用し、IISの問題に結びつくことになります。まず、リクエストが同じ* machine *によって処理されると仮定しているのはなぜですか? –