为什么SendMailAsync会导致asp.net等待,而Task.Delay却没有?

时间:2017-07-30 15:20:38

标签: c# asp.net asynchronous

我在asp.net WebApi操作中添加了以下行(完全按原样,因此您也可以尝试):

new SmtpClient { DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory}.SendMailAsync("a@test.com", "b@test.com", "s", "b");

它导致操作等待几秒钟,直到抛出500 An asynchronous module or handler completed while an asynchronous operation was still pending.错误显然asp.net检测到有异步任务正在运行。

然而,当我添加

Task.Delay(10000);

动作立即完成。为什么asp.net在这里没有检测到有异步任务在运行?

1 个答案:

答案 0 :(得分:1)

SmtpClient.SendAsync的{​​{3}}标记为ExternalThreading。这表明ASP.NET将涉及新线程,因此ASP.NET开始将这些操作的计数等待完成。

如果您需要在WebForms中使用异步方法,则应使用HostProtectionAttribute方法。