C# 用C语言实现双删除缓存# 问题背景
我读过(一篇非常有见地的文章)关于Redis Cache和SQL数据库之间的一致性,而且双删除方法看起来很简单,所以我考虑将其转移到我们的代码(C) 具体来说,我想在double delete中实现可变操作,根据YungPeng可以总结如下:C# 用C语言实现双删除缓存# 问题背景,c#,mysql,caching,redis,azure-cosmosdb,C#,Mysql,Caching,Redis,Azure Cosmosdb,我读过(一篇非常有见地的文章)关于Redis Cache和SQL数据库之间的一致性,而且双删除方法看起来很简单,所以我考虑将其转移到我们的代码(C) 具体来说,我想在double delete中实现可变操作,根据YungPeng可以总结如下: 删除Redis中的条目 创建、更新或删除MySQL中的数据 睡一会儿(比如500毫秒) 再次删除Redis中的条目 问题 不过,我有两个问题: 等待进程睡眠500毫秒,删除Redis然后返回给调用者(步骤3,4)似乎非常慢。先将任务(休眠并清除Redis
问题 不过,我有两个问题:
任务
真的可以吗?它会被执行吗?这项任务大约在0.5秒左右完成吗
提前谢谢 您可以这样做:
public async Task ClearRedisWithDelay()
{
await Task.Delay(500);
await ClearRedis();
}
打电话
ClearRedisWithDelay
没有等待
这种方法有几个缺点:
根据你的评论,你有自己的建议吗
Task.Run(async () => { await Task.Delay(500); await ClearRedis(); })
将在一个新的线程中完成这项工作,这应该是可以接受的
关于时间的唯一保证是在调用ClearRedis之前至少延迟500毫秒。对,更像是
Task.Run(async()=>{wait Task.delay(500);wait ClearRedis();})
?因为我不想等待这个任务来降低我的代码速度。这应该可以工作,你实际上不需要等待ClearRedis(),但是Resharper在我的代码中跳过Wait时会给出警告,所以保留它。不要紧,您正在使用新线程。使用Task.RunI的替代方案更新了我的答案。我刚刚完成了任务计划程序答案的重写,您可能会感兴趣。
Task.Run(async () => { await Task.Delay(500); await ClearRedis(); })