关于使用StackExchange.Redis的事务,我有几个问题:
{1}
主题标签,第二个命令的键具有{2}
主题标签。 Execute()
/ExecuteAsync()
什么时候返回false
?只有在不满足设定条件的情况下?如果没有设置条件,它可以返回false
吗? Execute()
/ExecuteAsync()
会抛出还是只是返回false
?我是否还应该检查命令的任务(假设命令是完全正确的,并且通常不希望抛出),否则它们将被取消? 不幸的是the doc没有详细解释#2和#3。
最佳答案
我已经深入研究了StackExchange.Redis源代码并使用了驱动程序,这是我的观察结果:
ITransaction
实例Execute()
/ExecuteAsync()
答案似乎如下:
Execute()
/ExecuteAsync()
在两种情况下返回false
:当由于不满足条件而放弃事务时,以及驱动程序无法使命令排队时(例如由于服务器OOM)。所有命令任务将被标记为已取消。同样,如果其中一个命令在执行过程中失败(例如,由于错误的类型操作),则Execute()
/ExecuteAsync()
不会返回false
。 Execute()
/ExecuteAsync()
将引发异常,所有命令任务将保持“等待激活”状态。 综上所述,仅当
Execute()
/ExecuteAsync()
返回true
时,才应检查命令任务:每个任务将包含结果或错误(请参见Exception
属性)。关于c# - StackExchange.Redis:有关交易的几个问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48711230/