public async Task TestRetryStrategy() { int nCalls = 0; int succeedAfter = 3; Func <Task <int> > toRetry = async() => { nCalls++; if (succeedAfter-- > 0) { throw new OutOfMemoryException(); } return(await Task.Run(() => nCalls)); }; var result = await RetryStrategy.RetryAsync(toRetry, 5, 500); Assert.AreEqual(4, result); succeedAfter = 1; await Assert.ThrowsExceptionAsync <OutOfMemoryException>(() => RetryStrategy.RetryAsync(toRetry, 5, 500, (e) => { if (e is OutOfMemoryException) { throw e; } })); }