Ich habe einen Endpunkt, der eine Methode ausführt. Ich möchte sicherstellen, dass die Methode nicht ausgeführt wird, während sie ausgeführt wird, wenn ich den Endpunkt mehrmals drücke.Wie kann sichergestellt werden, dass der Endpunkt eine Methode nicht ausführt, wenn sie bereits ausgeführt wird?
Ich stelle mir vor ich kann eine Variable irgendwo im Thread-Pool oder so etwas? Ich bin mir nicht sicher, wie ich das untersuchen soll. Einige Hinweise würden mir gefallen.
Mein Beispiel:
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;
}
}
}
}
Was ist mit den anderen Anforderungen geschehen? Sollten sie Fehler zurückgeben? Auf die Fertigstellung warten und dann selbst an die Reihe kommen? Auf die Fertigstellung warten und dann das Ergebnis teilen? Etwas anderes? –
Eine String-Nachricht zurückzugeben wäre ideal, aber in meinem Fall spielt es keine Rolle. –
@EvaldasRaisutis Sie haben den Punkt des Kommentars verpasst. Es * spielt * eine Rolle und was Sie fragen, missbraucht das Kernverhalten von HTTP und führt definitiv zu IIS-Problemen. Erstens, warum gehen Sie davon aus, dass die Anfragen von derselben Maschine beantwortet werden? In einem Load-Balancing-Szenario, das nicht funktioniert –