C# 在另一个线程中通过方法调用类成员(IService)

C# 在另一个线程中通过方法调用类成员(IService),c#,C#,我想在我的类中实现一个模板方法,因此我有一个带有受保护成员的抽象基类。 在具体类中,我想在另一个线程调用的方法中使用这个成员 现在我的问题是——安全吗 public abstract class ClassBase { protected IService service = new Service(); protected internal abstract Method(); } public sealed class Class : ClassBase { p

我想在我的类中实现一个模板方法,因此我有一个带有受保护成员的抽象基类。 在具体类中,我想在另一个线程调用的方法中使用这个成员

现在我的问题是——安全吗

public abstract class ClassBase
{
    protected IService service = new Service();

    protected internal abstract Method();
}


public sealed class Class : ClassBase
{
    public void RunAsync()
    {
       InvokeAsync(Method); //Just a sample - runs asyncrounus
    }

    protected internal override Method()
    {
       var v = this.service.GetById(125);
       ...
    }
}
还是必须在继承类的方法中创建服务类型?
它只是一个处理数据库操作的服务类。

每个应用程序都有自己的安全定义,特别是在线程安全方面。e、 g.Console是线程安全的,但您可以在一个线程上更改Console.OutputEncoding,并影响另一个线程输出文本的方式,这对于特定应用程序可能不安全。您的代码是安全的,因为服务不会被任何其他线程破坏。它将始终具有有效值。在.NET中,所有对象分配都是原子的,但它可能会在调用InvokeAsync和调用方法之间发生变化,这可能对应用程序不安全。

以何种方式安全?这是WPF、Silverlight等吗?通常是安全的-该类可以在所有框架中使用。我已经实现了EAP模式,它与调用线程同步,因此它可以在GUI上工作。所以主要的问题是,我是否可以在方法中处理基类中的成员…嘿,很抱歉回答晚了-我不在办公室。因此,当我将基类中的IService成员设置为readonly时,它对我的目的安全吗?iSeries设备类型本身也有一个标记为只读的成员对象。在.net中,很多次的关联都是原子的,包括引用赋值。这还不足以保证线程安全,因此需要互斥、锁、联锁交换等。严格根据您发布的代码,您使用的服务是线程安全的,但这并不意味着任何其他代码都是线程安全的。