asp.net进程中长时间运行的代码

noe*_*tic 4 .net asp.net

例如,我们在asp.net中的代码形式代码隐藏:

private void btnSendEmails_OnClick()
{
    Send100000EmailsAndWaitForReplies();
}
Run Code Online (Sandbox Code Playgroud)

此代码执行将被超时原因终止.为了解决这个问题,我希望看到这样的事情:

private void btnSendEmails_OnClick()
{
    var taskId = AsyncTask.Run( () =>  Send100000EmailsAndWaitForReplies() );
    // Store taskId for future task execution status checking.
}
Run Code Online (Sandbox Code Playgroud)

并且这个方法将在特殊的环境中以某种方式在w3wp.exe进程之外执行.

有没有人知道用于解决此类问题的框架/工具集?

更新:电子邮件发送方法只是我的意思的一个例子.事实上,我可能需要在asp.net工作流程之外执行许多功能.

例如,对于聚合来自几个第三方服务的数据,对其执行某些操作并将其发送回另一个服务的应用程序而言,这一点非常重要.

Eri*_*ard 5

这已作为其他问题的一部分进行了讨论:

asp.net中的多线程

ASP.NET中的BackgroundWorker线程

没有好办法做到这一点.您不希望ASP.NET工作进程中有任何长时间运行的进程,因为它可能在您完成之前进行回收.

编写Windows服务以在后台运行,为您完成工作.将消息丢弃到MSMQ以启动任务.然后他们可以随心所欲地跑.


Ric*_*SFT 3

  1. QueueBackgroundWorkItem我的示例显示发送电子邮件。
  2. HangFire 开源项目适用于共享托管。
  3. 在 Azure 上,您可以使用WebJobs
  4. 在 Azure、云服务上