【发布时间】:2017-12-20 06:28:34
【问题描述】:
伙计们,朋友们........我需要备份。在将 .Net 框架升级到 4.5 之前,我有一个功能完善的批量邮件系统。这就是我尝试异步运行后台工作程序时得到的结果
此时无法启动异步操作。异步操作只能在异步处理程序或模块内或在页面生命周期中的某些事件期间启动。如果在执行 Page 时发生此异常,请确保将 Page 标记为 方法。
每个异步调用都失败,包括我的发送邮件异步操作方法
mailSmtpClient.SendAsync(mailMessage, userState);
我尝试了一些概念,例如将我的 webconfig 更改为如下所示:
<appSettings>
<add key="aspnet:AllowAsyncDuringSyncStages" value="false" />
</appSettings>
我也试过
Task.Factory.StartNew(() => bw.RunWorkerAsync());
当我尝试第二个时,它刷新了我的 HttpContext 并获得了一个 HttpContext 异常
我的代码是一个基本的后台工作者
public void startsending() {
//Task.Factory.StartNew(() => bw.RunWorkerAsync()); fails
bw.RunWorkerAsync();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Flush(); // send all buffered output to client
HttpContext.Current.Response.End();
}
【问题讨论】:
-
MVC 还是网页?什么叫
startsending?为什么要使用后台工作人员? -
我使用的是后台工作程序,因为它是我之前的 .NET 4.0 配置中的现有代码。我猜 BW 在 4.5 中完全被钉死在十字架上。我不得不用 .net 4.5 async/await 功能重写整个类。它实际上效果更好,疼痛更少。
标签: .net backgroundworker .net-4.5 async-await