【发布时间】:2017-07-10 07:14:13
【问题描述】:
假设我有一个方法可以遍历 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 循环的情况下重试它,还是应该创建一个全新的事务并重新从头开始枚举?
【问题讨论】:
-
见this文章;它有很多很棒的信息。