メールをダウンロードしてデータベースに格納するために、Azureワーカーロールを作成しようとしています。私はメールサーバーに接続や認証ができないときにいくつかの例外を投げかけていますが、これを捕まえることは機能しません。Azureワーカーロールで例外をキャッチできません
私がスローした例外は、try catchブロックによって捕捉されていません。何故ですか?
私のWorkerロールの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()'コンストラクタが例外をスローしていないことは確かですか? –
whileループをtry catch内に配置します。これは、他のステートメントが例外をスローしていないことを確認します。 –
@BrendanGreen GetNewEmails()内でブレークポイントがヒットし、imapClient.Connect()に到達したコードをステップ実行して停止します。これは、私がRunAsyncメソッドのキャッチブロックにキャッチされないようにする例外をスローするところです。私はキャッチブロックにキャッチされていない理由を理解しようとしています。 – Maritim