Я пытаюсь создать роль Azure Worker для загрузки электронных писем и сохранения их в базе данных. Я бросаю некоторые исключения, когда я не могу подключиться или аутентифицироваться с почтовым сервером, но ловить их не работает.Невозможно поймать исключение в роли Azure Worker
Исключения, которые я бросаю, не попадают в блок catch try. Почему это?
RunAsync метод моего работника роли:
private async Task RunAsync(CancellationToken cancellationToken)
{
// TODO: Replace the following with your own logic.
while (!cancellationToken.IsCancellationRequested)
{
Trace.TraceInformation("Working");
var emailManager = new EmailManager();
var emails = new List<Email>();
try
{
emails = emailManager.GetNewEmails("outlook.office365.com", 993, "email", "password");
}
catch(Exception ex)
{
Trace.TraceInformation("Error");
}
await Task.Delay(1000);
}
}
EmailManager.GetNewEmails()
public List<Email> GetNewEmails(string server, ushort port, string username, string password)
{
var imapClient = new ImapClient(server, port, username, password, false);
if (!imapClient.Connect())
throw new Exception("Unable to connect to server.");
if (!imapClient.Authenticate())
throw new Exception("Unable to authenticate with server.");
var messages = imapClient.GetMessages();
var emails = Mapper.Map<List<MailMessage>, List<Email>>(messages);
return emails;
}
Вы уверены, что ваш конструктор 'EmailManager()' не выбрасывает исключение? –
Положите петлю внутри попытки поймать. Это позволит убедиться, что другие утверждения не выбрасывают исключение. –
@BrendanGreen У меня есть точки останова, попавшие внутрь GetNewEmails(), и, пройдя через код, я получаю imapClient.Connect(), а затем он останавливается. Это потому, что это то, где я бросаю исключение, которое заканчивается тем, что не поймано блоком catch в моем методе RunAsync. Я пытаюсь понять, почему это не поймано в блоке catch. – Maritim