Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C语言实现双删除缓存# 问题背景_C#_Mysql_Caching_Redis_Azure Cosmosdb - Fatal编程技术网

C# 用C语言实现双删除缓存# 问题背景

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

我读过(一篇非常有见地的文章)关于Redis Cache和SQL数据库之间的一致性,而且双删除方法看起来很简单,所以我考虑将其转移到我们的代码(C)

具体来说,我想在double delete中实现可变操作,根据YungPeng可以总结如下:

  • 删除Redis中的条目
  • 创建、更新或删除MySQL中的数据
  • 睡一会儿(比如500毫秒)
  • 再次删除Redis中的条目

  • 问题 不过,我有两个问题:

  • 等待进程睡眠500毫秒,删除Redis然后返回给调用者(步骤3,4)似乎非常慢。先将任务(休眠并清除Redis)排队,然后返回给调用者而不等待任务完成,这样是否合理

  • 如果我在问题1中的建议是合理的,我将如何在C#中这样做?以下代码是否可以接受

  • 从不等待
    任务
    真的可以吗?它会被执行吗?这项任务大约在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(); })