【发布时间】:2011-12-28 13:12:48
【问题描述】:
我有一个为多个客户提供服务的每次调用 WCF 服务。我希望通过运行一些后台进程来加速服务,这样它们就不会阻塞或减慢服务的主要功能。
一个例子是主函数需要返回一组数据,而后台线程需要根据参数记录一些统计数据。
代码:
Public Function GetAccountDetails(id As Integer) As AccountDetails
Dim retVal As New AccountDetails
Dim a As New Accounts
retVal = a.GetAccountDetails(id)
Dim t As New Thread(New ThreadStart(Sub()
Dim s As New Statistic
s.StatisticType = StatisticType.GetAccount
s.Parameter = id.ToString
s.Record()
End Sub))
t.Start()
Return retVal
End Function
如果我使用这个后台线程来记录统计数据,它不会阻止主线程将数据返回给客户端。
它在测试场景中运行良好,但我的问题是,在将数据返回给客户端之前让这个线程执行而不加入它有什么危险吗? 统计数据可能会丢失吗? 服务器端会不会有潜在的内存问题?
谢谢。
【问题讨论】:
-
我不完全理解为什么你想这样做......在每次调用的场景中,每个传入的请求都有自己的、单独的服务类实例- 完全独立于其他请求正在做什么。我认为通过在服务类中使用后台线程来增加更多复杂性没有任何好处......
-
不允许客户端直接记录统计信息,只有服务可以。没有公开的服务。服务必须记录统计数据,这是一种加快数据返回客户端速度的方法——让后台线程完成客户端不需要知道的工作。
标签: vb.net multithreading wcf web-services thread-safety