考虑到我的WCF服务中有以下(非常基本的)方法:
public async Task MyMethod()
{
await Task.Run(() =>
{
//do stuff
});
}
我面临的问题是任务中的代码搜索数据库,发送所需记录的电子邮件并在发送时更新数据库,但是如果呼叫要快速连续两次,那么潜在的重复可能是发送。
是否可以在此方法中实现信号量以防止这种情况,因为我编写的UWP应用程序会异步调用该方法?
答案 0 :(得分:1)
在类型为Mutex的类中创建一个私有字段,并保护代码,如下所示:
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();
});
}