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

时间:2013-03-12 15:04:26

标签: c#

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

现在我的问题是 - 这样安全吗?

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);
       ...
    }
}

或者我是否必须在继承的类中的Method()中创建服务类型? 它只是一个处理数据库操作的服务类。

1 个答案:

答案 0 :(得分:0)

每个应用程序都有自己的“安全”定义,特别是在线程安全方面。 (例如Console是线程安全的,但您可以在一个线程上更改Console.OutputEncoding并影响另一个线程如何输出文本 - 这对于特定应用程序可能不是“安全”。你的代码是“安全的”,因为service不能被任何其他线程破坏 - 它将始终具有“有效”值(所有object赋值在.NET中是原子的),但它可能会在调用InvokeAsync和调用Method之间发生变化 - 对于应用程序而言可能不是“安全”。