我想实现一些方法来防止方法被立即调用几次.例如,想象一下,如果我有一个类:
class Example
{
public void MyFunction()
{
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
用户可以调用MyFunction但仅在自上次调用后经过3秒后调用.如果在3秒之前调用它,则不会发生任何事情(应忽略调用).
我该怎么办?
编辑:
我不想用Thread.Sleep.我在考虑使用Timer类System.Timer.但不知道我将如何使用它来满足我的需求.
我认为没有必要在这里使用计时器.你可以使用Stopwatch:
class Example
{
private static readonly TimeSpan MinInterval = TimeSpan.FromSeconds(3);
private readonly Stopwatch stopwatch = new Stopwatch(); // Stopped initially
public void MyFunction()
{
if (stopwatch.IsRunning && stopwatch.Elapsed < MinInterval)
{
return;
}
try
{
// Do stuff here.
}
finally
{
stopwatch.Restart();
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不是线程安全的......多个线程可以在同一个实例上同时执行该方法.每个实例都使用单独的秒表,因此多个线程可能会使用多个实例 - 如果要禁止跨所有实例的调用,则需要为秒表使用静态字段,并且必须添加锁定以便安全地访问它.
另请注意,尽管您可以使用a DateTime来检测上次执行时间,但通过用户更改系统时钟很容易出错.
try/ finallyhere 的使用是为了避免快速连续的多次调用,这些调用因抛出异常而失败.同样,这可能不是你想要的......你应该考虑是否确实希望在呼叫失败时重置秒表.
| 归档时间: |
|
| 查看次数: |
481 次 |
| 最近记录: |