메소드를 실행하는 엔드 포인트가 있습니다. 엔드 포인트에 여러 번 도달했을 때 메소드가 실행되는 동안 메소드가 실행되지 않도록하고 싶다.이미 실행중인 경우 끝점에서 메서드를 실행하지 않도록하는 방법은 무엇입니까?
나는 어딘가에 스레드 풀이나 다른 변수를 설정할 수 있다고 상상할 수 있습니까? 나는 이것을 조사하는 방법에 대해 확신하지 못한다. 일부 리드는 인정 될 것이다.
내 예 :
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 *에 의해 제공된다고 가정하는 이유는 무엇입니까? 작동하지 않는로드 균형 조정 시나리오에서 –