asp.net - 如何有选择地在后台线程上运行一些代码?

标签 asp.net vb.net multithreading

我正在寻找一种可配置的方式在后台线程上运行一些代码,但我不太确定“最佳实践”是什么。目前,我有一些类似的东西:

Dim sendEmails = Sub()
                     Dim emailToSend As New SendEmailRequest()
                     TransferCommonValuesTo(emailToSend, request, sendingUser)
                     usersToSendEmailTo.ForEach(Sub(u)
                                                    TransferValuesTo(emailToSend, u, m_EmailMessageMerger.GetMergedMessage(request.Message, u))
                                                    m_EmailSender.Send(emailToSend)
                                                End Sub)
                 End Sub


If cfg.SendBulkEmailUsingBackgroundThread Then
    Dim worker As New Thread(sendEmails)
    worker.IsBackground = True
    worker.Start()
Else
    sendEmails()
End If

这是实现我的要求的好方法吗?

更新:

这将从ASP.NET前端调用(尽管其他方法也可以),而我正在使用Framework 3.5。

最佳答案

我倾向于在自己的类TaskRunner中将这种行为抽象化,并具有一个接受Action的Run方法。这可以将线程问题分开,并使代码更整洁,并且在不将异步行为嵌入应用程序的各种类中的情况下,您还可以更加灵活地实现异步行为。

如果您确实在Asp.Net应用程序中运行了异步操作,则需要查看一种机制来保持应用程序处于 Activity 状态,以防止应用程序回收。通过在操作运行时轮询站点中的页面来维护 Activity 请求,以使运行时不会认为它处于空闲状态。

关于asp.net - 如何有选择地在后台线程上运行一些代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7221302/

相关文章:

c# - 使用 asp.net web 表单在值设置为空时验证下拉列表

vb.net - 在数据库中搜索与用户输入内容相匹配的记录

java - 设置 TextView 文本时应用程序卡住

c++ - std::future::wait 是内存屏障吗? (我无法解释这个数据竞赛)

javascript - 如何在 JavaScript 正则表达式中允许正斜杠 (/)

asp.net - 在asp.net中获取Facebook Page Feed(使用graph api),收到错误 "Unsupported Browser"

mysql - VB.NET MySqlDataAdapter.Fill 大约需要 6-7 秒

c++ - 从单独的线程启动时出现 OpenOffice Automation 问题

c# - 如何正确返回列表项进行编辑?

asp.net - App.Config 和 Web.Config 之间的区别?