gpt4 book ai didi

c# - 如果端点已经在运行,如何确保端点不执行该方法?

转载 作者:行者123 更新时间:2023-11-30 23:24:54 24 4
gpt4 key购买 nike

我有一个运行方法的端点。我想确保当我多次点击端点时,该方法不会在运行时执行。

我想我可以在线程池的某处设置一个变量或什么的?我不确定如何着手调查这一点。我们将不胜感激。

我的例子:

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
}

但可能存在一个问题:由于静态变量在所有 session 之间共享,因此每个用户都将锁定此方法。

此行为可能是故意的。如果你想阻止所有 session 的执行,这段代码就可以了。如果您只想为该用户阻止执行,允许该方法在每个用户同时运行一次,则必须将该对象放入 session 存储中。

如果你只是想通知客户端它已经在运行,你也可以抛出一个异常:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com