#c# #stackexchange.redis
Вопрос:
Попытка выполнить транзакцию, как показано ниже, с помощью 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()
, но все еще безуспешно. Что может быть не так ?
Ответ №1:
Вы блокируете выполнение транзакции, ожидая асинхронной команды. Рефакторинг для ожидания после выполнения транзакции.
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.");
}