w3wp.exeは、Webアプリケーションの受信リクエストを処理するプロセスです(私が間違っている場合は修正してください)。クラスがある場合は、このようにCustomerに呼び出させますはクラスレベルのパブリックプロパティのスレッドセーフです
public class Customer
{
public string FirstName{get;set;}
public string LastName{get;set;}
}
だから今、このクラスは、プロパティ、姓と名へのアクセスを持ってw3wp.exeの中で実行中のインスタンスはヒープ内に作成されたこの
var customer = new Customer();
とすべてのスレッドのようなコードでアクセスされたとき顧客オブジェクトの
この場合、FirstNameプロパティとLastNameプロパティはスレッドセーフではありませんか?特定のインスタンスにのみ属し、スレッドセーフであるプライベートプロパティを使用することは常に賢明ですか?
シナリオで2つのスレッドが同じ 'Customer'オブジェクトを保持することは可能ですか?たとえば、いくつかの共有状態または静的コンテナから? –
Nope。このクラスはビジネスレイヤー上にあり、静的でも共有でもありません。 したがって、このクラスが要求の一部としてインスタンス化される場合、各インスタンス化は新しいスレッドで実行されるため、このシナリオのクラスレベルのpublicプロパティは静的リソースまたは共有リソースではないためスレッドセーフです。間違っていれば私を訂正してください。 –
必ずしも "新しい"スレッドではなく、キャッシュされたスレッドである可能性が高いです。このキャッシュされたスレッドは、ASP.NETアプリケーション(HttpApplicationまたは "Global")のインスタンスを保持します。だから、このスレッドは、それがあらかじめ存在していたかもしれないどんなコンテキストも持っています。 –