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密钥的到期日
批处理中完成这一切
我的印象是,当涉及批处理时,您无法假定顺序,更不用说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)
}