У меня есть конечная точка, которая запускает метод. Я хочу, чтобы этот метод не выполнялся во время его запуска, когда я несколько раз ударял конечную точку.Как убедиться, что конечная точка не выполняет метод, если он уже запущен?
Я предполагаю, что могу установить переменную где-то в пуле потоков или что-то в этом роде? Я не уверен, как это сделать. Некоторые из них будут оценены.
Мой пример:
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. Во-первых, почему вы предполагаете, что запросы будут обслуживаться одним и тем же * машиной *? В сценарии балансировки нагрузки, который не будет работать –