C# OnStart和OnStop是否在同一线程上调用?

C# OnStart和OnStop是否在同一线程上调用?,c#,windows-services,thread-safety,C#,Windows Services,Thread Safety,是否保证在与OnStart相同的线程上调用OnStop?我这样问是因为我在OnStart中分配资源,并在OnStop中处理它们。如果没有这样的保证,我应该在访问我的服务字段之前添加内存限制。有一个保证,在OnStart返回之前,不会调用OnStop。实际上,我很确定这意味着如果它们不是从同一个线程调用的,那么它们之间就已经有了内存隔离,因为一个线程必须与另一个线程通信。不过,我不知道是否有任何正式的保证。如果您担心这一点,那么OnStart末尾和/或OnStop开头的完整内存围栏将不会对性能产生

是否保证在与
OnStart
相同的线程上调用
OnStop
?我这样问是因为我在
OnStart
中分配资源,并在
OnStop
中处理它们。如果没有这样的保证,我应该在访问我的服务字段之前添加内存限制。

有一个保证,在
OnStart
返回之前,不会调用
OnStop
。实际上,我很确定这意味着如果它们不是从同一个线程调用的,那么它们之间就已经有了内存隔离,因为一个线程必须与另一个线程通信。不过,我不知道是否有任何正式的保证。如果您担心这一点,那么
OnStart
末尾和/或
OnStop
开头的完整内存围栏将不会对性能产生可测量的影响。@HarryJohnston,这不是性能问题,毕竟服务的工作时间将比围栏长,但我更喜欢在编写代码时意识到自己在做什么,而不是“以防万一”地使用各种功能:“-”。NET包装器(ServiceBase)使用线程池调用OnStart/OnStop。我并不完全清楚他们为什么喜欢这样做,这是没有文档记录的代码。但要知道您不必担心这一点,启动tp线程提供了一个隐式的完整屏障。可以保证在返回
OnStart
之前不会调用
OnStop
。实际上,我很确定这意味着如果它们不是从同一个线程调用的,那么它们之间就已经有了内存隔离,因为一个线程必须与另一个线程通信。不过,我不知道是否有任何正式的保证。如果您担心这一点,那么
OnStart
末尾和/或
OnStop
开头的完整内存围栏将不会对性能产生可测量的影响。@HarryJohnston,这不是性能问题,毕竟服务的工作时间将比围栏长,但我更喜欢在编写代码时意识到自己在做什么,而不是“以防万一”地使用各种功能:“-”。NET包装器(ServiceBase)使用线程池调用OnStart/OnStop。我并不完全清楚他们为什么喜欢这样做,这是没有文档记录的代码。但要知道您不必担心,启动tp线程提供了一个隐式的完整屏障。