只有通过3秒才能再次调用方法

Vah*_*iri 2 .net c#

我想实现一些方法来防止方法被立即调用几次.例如,想象一下,如果我有一个类:

class Example
{
    public void MyFunction()
    {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

用户可以调用MyFunction但仅在自上次调用后经过3秒后调用.如果在3秒之前调用它,则不会发生任何事情(应忽略调用).

我该怎么办?

编辑:

我不想用Thread.Sleep.我在考虑使用Timer类System.Timer.但不知道我将如何使用它来满足我的需求.

Jon*_*eet 9

我认为没有必要在这里使用计时器.你可以使用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 的使用是为了避免快速连续的多次调用,这些调用因抛出异常而失败.同样,这可能不是你想要的......你应该考虑是否确实希望在呼叫失败时重置秒表.