gpt4 book ai didi

c# - .NET StackExchangeRedis 和 Batch 的执行顺序不能保证?

转载 作者:IT王子 更新时间:2023-10-29 06:13:20 25 4
gpt4 key购买 nike

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

  • 将键/值添加到 Redis 数据库。
  • 为新的 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)
}

在单个 redis Batch 中完成这一切。

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

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

  • KeyExpiresAsync <-- key 还不存在。
  • SetAddAsync <-- key 不存在。 key 已创建。然后将成员添加到 key 。

我希望但不希望顺序得到保证,这意味着..它会尝试尽可能快地并行处理。

那么 - 我的理解是正确的还是错误的?

最佳答案

保证顺序,不会并行操作。

转述其中一位作者 (@Mark-Gravell):

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

更新

@mjwills 已经提到了 SO answer .还有 this unit test假设如此。您也可以在 RedisBridge.cs 上验证代码。即使在集群中,由于您向同一个键发出两个命令,它们都将转到同一个节点,并且它们在内部被插入/拉出 Queue .

关于c# - .NET StackExchangeRedis 和 Batch 的执行顺序不能保证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45483908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com