2017-09-20 10 views
0

smtpクリエートを使用して電子メールを送信します。この操作は、インデックスページにリダイレクトするために他のスレッドで実行する必要があります。これまで私は以下のコードを書いています。非同期メソッドで電子メールを送信

private async Task<int> SendEmail(System.Net.Mail.SmtpClient smtp, System.Net.Mail.MailMessage m) 
{ 
    smtp.Send(m); 
    return 0; 
} 

このメソッドは、このように他の非同期タスクメソッドで呼び出されます。

await SendEmail(smtp, m); 

この命題は正しいですか?あなたがのsendEmailの実装に変更することができます

+0

'async'とマークされたメソッドは、' await'を使って 'async'アクションも実行する必要があります。そうでない場合は、 'async'を使用しないでください。' Task'/'Task 'も返さない場合は、それを削除してintを返してください。最後に*非同期メソッドの場合は、戻り値の型がvoidの場合は単に 'Task'を返します。 – Igor

+0

あなたは何をしたいのか、なぜそれが正しいのかを知らずに「正しい」ものを言うのは非常に難しいです。このコードにはスレッドを開始するものは何もありません。また、 'Send'メソッドは非同期ではないので、あなたが今何をしていると思いますか分かりません。 – kai

+1

スレッドを作成する 'async' /' await'については何もありません。あなたがスレッドを作成する何かを待っていない限り、新しいスレッドは作成されません。 – Enigmativity

答えて

1

private async Task<int> SendEmail(System.Net.Mail.SmtpClient smtp, 
System.Net.Mail.MailMessage m) 
{ 
    await smtp.SendAsync(m).ConfigureAwait(false); 
    return 0; 
} 

はまた、次のURLを参照してください。 https://msdn.microsoft.com/en-us/magazine/jj991977.aspx

非同期
すべての方法は、ブロッキングと非同期コードを混在させないでください。

コンテキストのコンフィグレーション
できる場合はConfigureAwait(false)を使用してください。

関連する問題