【问题标题】:BackgroundWorker RunWorkerAsync fails after ugrade to .net 4.5. Async issue升级到 .net 4.5 后,BackgroundWorker RunWorkerAsync 失败。异步问题
【发布时间】: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


【解决方案1】:

设置 aspnet:AllowAsyncDuringSyncStages 默认为 false。尝试将其设置为 true。

【讨论】:

    猜你喜欢
    • 2012-08-15
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多