我在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在这里没有检测到有异步任务在运行?
答案 0 :(得分:1)
SmtpClient.SendAsync
的{{3}}标记为ExternalThreading
。这表明ASP.NET将涉及新线程,因此ASP.NET开始将这些操作的计数等待完成。
如果您需要在WebForms中使用异步方法,则应使用HostProtectionAttribute方法。