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