9

Durante l'utilizzo SendMailAsync Sto ottenendo il seguente errore:SendMailAsync: Un modulo asincrono o gestore completate mentre un'operazione asincrona era ancora in corso

An asynchronous module or handler completed while an asynchronous operation was still pending

Il mio codice:

public static async Task SendEmail(MessageContent messageContent, string emailBody) 
{ 
    SmtpClient smtpClientNoSend = new SmtpClient(); 
    await smtpClientNoSend.SendMailAsync(mailMessage); 
} 

chiamata E-Controller:

public async System.Threading.Tasks.Task<ActionResult> Register() 
{ 
    await SendEmail(); 
} 

private void SendEmail() 
{ 
    SMTPEmail.SendEmail(msg, output.ToString()); 
    return null; 
} 

risposta

19

La gerarchia della chiamata è interrotta. Non si deve usare async void, cioè ment solo per i gestori di eventi, utilizzare async Task invece:

public static Task SendEmailAsync(MessageContent messageContent, string emailBody) 
{ 
    SmtpClient smtpClientNoSend = new SmtpClient(); 
    return smtpClientNoSend.SendMailAsync(mailMessage); 
} 

public async Task<ActionResult> Register() 
{ 
    await SendEmailAsync(); 
} 

private Task SendEmailAsync() 
{ 
    return SMTPEmail.SendEmailAsync(msg, output.ToString()); 
} 

Nota a margine - non sono sicuro perché hai tanti SendMail metodi, Si potrebbe restringere giù ad un singolo chiamata al metodo.

+0

Non capisco il metodo 'Register()'. Non dovrebbe includere una dichiarazione 'return'? – RaelB

+0

@RaelB No, è un metodo di ritorno 'Task'. È equivalente alla restituzione di 'void' da un metodo sincrono. –

Problemi correlati