在异步方法中实现信号量



考虑到我的 WCF 服务中有以下(非常基本的(方法:

public async Task MyMethod()
{
    await Task.Run(() => 
    {
        //do stuff
    });
}

我面临的问题是任务中的代码搜索数据库,发送所需记录的电子邮件并在发送时更新数据库,但是如果要快速连续两次调用,则可能会发送潜在的重复项。

是否可以在此方法中实现信号量以防止这种情况,因为我编写的 UWP 应用将异步调用该方法?

在类中创建一个互斥类型的私有字段,并像这样保护代码:

private Mutex _mutex = new Mutex();
private DateTime _lastRequest = DateTime.MinValue;
...   
public async Task MyMethod()
{
    await Task.Run(() => 
    {
        _mutex.WaitOne();
        if(DateTime.Now < _lastRequest + TimeSpan.FromSeconds(3))
            return;
        _lastRequest = DateTime.Now;
        //do stuff
        _mutex.ReleaseMutext();
    });
}

最新更新