You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

StackExchange.Redis v2.2.4版本事务始终无法执行是什么原因?

StackExchange.Redis 事务无法执行问题排查

核心原因

你代码中存在的最直接问题是提前await了事务内的操作方法:
StackExchange.Redis的事务执行逻辑是先将所有事务命令加入本地队列,直到调用ExecuteAsync/Execute时才会批量发送到Redis服务端执行,事务内调用的StringSetAsync等方法返回的Task,在事务提交前永远不会进入完成状态,你提前await这个Task会导致线程无限等待,自然无法命中后续的ExecuteAsync语句。

其他可能原因

  • 事务前置条件不满足:你添加了Condition.KeyExists(key)的检查条件,若调用ExecuteAsync时Redis中不存在对应key,事务会直接在本地终止,不会执行后续逻辑。
  • 异步上下文死锁:若上层调用代码用.Result/.Wait()同步阻塞等待异步事务方法返回,且没有配置.ConfigureAwait(false),会引发异步上下文死锁,线程被卡住无法继续执行。

修复后的代码示例

...
var transaction = Database0.CreateTransaction();
transaction.AddCondition(Condition.KeyExists(key));
// 事务内的操作不需要await,不需要读取返回值可直接忽略返回的Task
_ = transaction.StringSetAsync(key, value);
bool isCommited = await transaction.ExecuteAsync();
if (isCommited)
{
    Logger.Info($"{GUID} Transaction Key {key} SET in Redis");
}
else
{
    Logger.Warn($"{GUID} Transaction Key: {key} was NOT SET in Redis.");
}
...

内容的提问来源于stack exchange,提问作者Flamur Dervishi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:09:02