private void RetryPublish(ICommand command) { var attribute = Attribute.GetCustomAttributes(command.GetType()) .FirstOrDefault(a => a is CommandRetryAttribute) as CommandRetryAttribute; if (attribute == null) { TryPublish(command); } else { var publishAction = new Action(() => TryPublish(command)); Retry.Action(publishAction, attribute.RetryCount, attribute.RetryMilliseconds); } }
//public override string GetLastVpnEmailCode(EmailConfig emailConfig, bool markAsRead, int maxRetries = 3, int millisecondsBetweenRetries = 3000) public override string GetLastVpnEmailCode(EmailConfig emailConfig, bool markAsRead) { var client = GetClient(emailConfig); if (client == null) { Console.WriteLine("Not able to log into the email!"); return(null); } EmailMessage mostRecentVpnEmailMessage = null; Retry.Action((r) => { mostRecentVpnEmailMessage = GetVpnEmail(client, emailConfig?.EmailSubjectPrefix, emailConfig?.InboxSubFolderNameWithVpnEmails); } , whileIs: (r) => mostRecentVpnEmailMessage == null , maxRetries: emailConfig?.GetEmailMaxRetries ?? EmailConfig.DEFAULT_GetEmailMaxRetries , every: TimeSpan.FromMilliseconds(emailConfig?.GetEmailRetryEveryMilliseconds ?? EmailConfig.DEFAULT_GetEmailRetryEveryMilliseconds) ); if (mostRecentVpnEmailMessage == null) { return(null); } if (markAsRead) { mostRecentVpnEmailMessage.IsRead = true; mostRecentVpnEmailMessage.Update(ConflictResolutionMode.AutoResolve); // https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-process-email-messages-in-batches-by-using-ews-in-exchange // client.UpdateItems(new List<EmailMessage> { mostRecentVpnEmailMessage }, folderIdVpn, ConflictResolutionMode.AutoResolve, MessageDisposition.SaveOnly, SendInvitationsOrCancellationsMode.SendToNone); } var vpnCode = ExtractVpnCodeFromEmailSubject(mostRecentVpnEmailMessage?.Subject, emailConfig?.EmailSubjectPrefix); return(vpnCode); }
public void WhenActionSucceedsEventuallyThenActionIsPerformed() { Assert.DoesNotThrow(() => Retry.Action(EventualSuccess, NumberOfRetries, TimeBetweenRetries)); Assert.That(_didActionSucceed, Is.True); }
public void WhenActionAttemptsExceedsNumberOfRetriesThenExceptionIsThrown() { Assert.Throws <TestException>(() => Retry.Action(AlwaysFails, NumberOfRetries, TimeBetweenRetries)); }