考虑到我的 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();
});
}