问题背景
我读过yungpeng的文章(一篇非常有见地的文章)关于redis缓存和sql数据库之间的一致性,而double delete方法看起来很简单,所以我考虑把它移到我们的代码(c#)中。
具体来说,我想在double delete中实现可变操作,根据勇鹏的介绍,可以总结如下:
删除redis中的条目;
创建、更新或删除mysql中的数据;
睡一会儿(比如500毫秒);
再次删除redis中的条目。
问题
不过,我有两个问题:
等待进程休眠500毫秒,删除redis然后返回调用者(步骤3、4)似乎非常慢。先将任务(休眠并清除redis)排队,然后返回调用者而不等待任务完成,这样做合理吗?
如果我在问题1中的建议是合理的,我将如何在c中这样做?以下代码可以接受吗?
public async Task WriteOperation()
{
await ClearRedis();
await WriteDB();
Task.Run( () => { // Sleep 0.5 seconds then clear Redis } ); // Notice how I didn't await this
return;
}
永远不等待机会真的可以吗 Task
? 它会被执行吗?会吗 Task
大约完成0.5秒?
提前谢谢!
1条答案
按热度按时间7gyucuyw1#
你可以这样做:
打电话给我
没有等待。
这种方法有一些缺点:https://stackoverflow.com/a/54485904/14072498
从你的评论中得到你自己的建议
将在一个新的线程,这应该是可以接受的工作。
关于时间的唯一保证是在调用clearredis之前至少延迟500毫秒。