1

クラスにテンプレートメソッドを実装したいので、保護されたメンバーを持つ抽象基本クラスがあります。具体的なクラスでは、このメンバーを別のスレッドによって呼び出されるメソッドで使用したいと思います。

今私の質問は-それは安全ですか?

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()内にサービスタイプを作成する必要がありますか?これは、データベース操作を処理する単なるサービスクラスです。

4

1 に答える 1

0

各アプリケーションには、特にスレッドセーフの観点から、独自の「安全」の定義があります。(たとえばConsole、スレッドセーフですがConsole.OutputEncoding、あるスレッドで変更して、別のスレッドがテキストを出力する方法に影響を与える可能性があります。これは、特定のアプリケーションにとって「安全」ではない場合があります)。コードはservice、他のスレッドによって破損されない限り「安全」です。常に「有効な」値になります(object.NETではすべての割り当てがアトミックです)が、呼び出されたときInvokeAsyncと呼び出されたときの間で変更される可能性がありますMethodが呼び出されます。これは、アプリケーションにとって「安全」ではない可能性があります。

于 2013-03-12T16:20:42.017 に答える