我有一个运行方法的端点。我想确保在多次击中端点时该方法在运行时不会执行。
我想我可以在线程池中的某个地方设置变量?我不确定如何进行调查。一些线索将不胜感激。
我的例子:
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;
}
}
}
}
最佳答案
您可以创建一个锁对象,以确保该操作不会并行运行。
private static object lockObject = new object();
lock (lockObject)
{
// your code
}
但是可能存在问题:由于在所有会话之间共享静态变量,因此该方法将为每个用户锁定。
此行为可能是故意的。如果要阻止所有会话的执行,则可以使用此代码。如果只想阻止该用户执行,并允许该方法对每个用户同时运行一次,则必须将对象放入会话存储中。
如果仅想通知客户端它已经在运行,则还可以引发异常:
private static bool alreadyExecuting = false;
if (alreadyExecuting)
{
throw new Exception("Already running");
}
alreadyExecuting = true;
try
{
// your code
}
finally
{
alreadyExecuting = false;
}
关于c# - 如果端点已经运行,如何确保端点不执行方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37562329/