Stack Exchange Redis 事务永远不会执行

Stack Exchange Redis transaction is never executed

尝试使用 StackExchange.Redis 库 v2.2.4 执行如下交易:

...
var transaction = Database0.CreateTransaction();
transaction.AddCondition(Condition.KeyExists(key));
await 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.");
}
...

但是事务永远不会执行,这意味着调试器永远不会命中语句 bool isCommited = await transaction.ExecuteAsync()

我也试过同步 Execute() 仍然没有成功。有什么问题吗?

您正在通过等待异步命令阻止事务执行。事务执行后重构为 await。

var transaction = Database0.CreateTransaction();
var stringSetTask = transaction.StringSetAsync(key, value);
transaction.AddCondition(Condition.KeyExists(key));
bool isCommited = await transaction.ExecuteAsync();
if (isCommited)
{
    await stringSetTask;
    Logger.Info($"{GUID} Transaction Key {key} SET in Redis");
}
else
{
    Logger.Warn($"{GUID} Transaction Key: {key} was NOT SET in Redis.");
}