Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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# .NET StackExchangeDis和批处理执行顺序不保证?_C#_.net_Redis_Async Await_Stackexchange.redis - Fatal编程技术网

C# .NET StackExchangeDis和批处理执行顺序不保证?

C# .NET StackExchangeDis和批处理执行顺序不保证?,c#,.net,redis,async-await,stackexchange.redis,C#,.net,Redis,Async Await,Stackexchange.redis,我正在审阅以下代码,试图: 向Redis db添加一个键/值 设置新redis密钥的到期日 i、 e 在一个redis批处理中完成这一切 我的印象是,当涉及批处理时,您无法假定顺序,更不用说async/await中的多个任务了 因此,可能出现以下顺序: KeyExpiresAsync订单得到保证,操作不会并行进行 转述其中一位作者(@markgravel): 一个批处理做的是推迟一组操作,并确保它们彼此相邻地发送到一个连接上,因此在该多路复用器上没有其他线程将在中间获得命令。 更新 @mj

我正在审阅以下代码,试图:

  • 向Redis db添加一个键/值
  • 设置新redis密钥的到期日
i、 e

在一个redis
批处理中完成这一切

我的印象是,当涉及批处理时,您无法假定顺序,更不用说
async/await
中的多个任务了

因此,可能出现以下顺序:


  • KeyExpiresAsync
    订单得到保证,操作不会并行进行

    转述其中一位作者(@markgravel):

    一个批处理做的是推迟一组操作,并确保它们彼此相邻地发送到一个连接上,因此在该多路复用器上没有其他线程将在中间获得命令。 更新


    @mjwills已经提到了一个问题。也假定是这样。您还可以在代码中验证这一点。即使在集群中,由于您向同一个键发出两个命令,因此这两个命令都将转到同一个节点,并且它们在内部被推送到/从中拉出。

    是否有帮助?请参考原始报价/文档?(不是抱怨,只是好奇等)。只是更新了答案。不幸的是,在SE.Redis上没有好的文档。
    {
        var batch = database.CreateBatch();
    
        var tasks = new Task[]
        {
            batch.SetAddAsync(key, value, flags),
            batch.KeyExpireAsync(key, expiry, flags)
        };
    
        batch.Execute();
    
        await Task.WhenAll(tasks)
    }