Скажем, у меня есть метод, который перебирает все строки в ReliableDictionary
так:Обработка переходных исключений при переборе над Fabric Service ReliableDictionary
var reliableDictionary = await StateManager.GetOrAddAsync<IReliableDictionary<TKey, TValue>>(dictionaryName);
using (var tx = StateManager.CreateTransaction())
{
var enumerable = await reliableDictionary.CreateEnumerableAsync(tx);
var enumerator = enumerable.GetAsyncEnumerator();
while (await enumerator.MoveNextAsync(cancellationToken))
{
// Read enumerator.Current and do something with the value
// (not writing back to the dictionary here)
}
}
Как я мог обрабатывать повторные попытки переходных исключений здесь (т.е. TimeoutException
, FabricNotReadableException
и FabricTransientException
)?
В документации кода для счетчика неясно, какие исключения могут быть выбраны для каждого метода. Какие методы могут использовать эти временные исключения - CreateTransaction
, CreateEnumerableAsync
, GetAsyncEnumerator
, MoveNextAsync
и enumerator.Current
?
Если из одного из этих методов выбрано переходное исключение, как мне повторить попытку?
Если исключение переходного процесса выбрано из MoveNextAsync
или enumerator.Current
, могу ли я его повторить, не прерывая цикл while, или я должен создать совершенно новую транзакцию и начать перечислить с начала снова?
См. Статью [это] (https://www.codeproject.com/Articles/872099/Transient-Exception-Handling); у него много отличной информации. – CodingYoshi