我有一个作为 Windows 服务运行的 WCF 服务。该服务引用一个包含类 X 的 DLL,该类具有公共方法 func1。func1 使用任务(TPL) 异步调用另一个方法 func2(private)。func2 独立执行长时间运行的任务。设置是:
WCF
public string wcfFunc()
{
X obj = new X();
return obj.func1();
}
动态链接库
public class X
{
static bool flag;
public X()
{
flag = true;
}
public string func1()
{
if (!flag)
return "Already in action";
Task t = null;
t = Task.Factory.StartNew(() => func2(),TaskCreationOptions.LongRunning);
return "started";
}
void func2()
{
try
{
flag = false;
//Does a long running database processing work through .Net code
}
catch (Exception)
{
}
finally
{
flag = true;
}
}
}
WCF 函数是从网站调用的。该网站由多个用户使用。不允许两次执行数据库处理func2。任何用户都可以触发它。但是在执行过程中,如果任何其他用户试图触发它,它应该表明处理已经在运行。我尝试使用静态变量“标志”来检查它,但它似乎不起作用。
有什么解决办法吗?提前致谢。