2

私はマルチスレッドアプリケーションで作業しているため、異なるスレッドで使用していた型インスタンスで競合を引き起こす可能性のあるプライベートフィールドを使用しないように常に努めていました。代わりに、メソッド パラメーターとして機能するために必要な情報を収集してきました。これにより、すべてが同じパラメーターを宣言する多数のメソッドが作成されました。

private void MySubmethod(MyConfiguration configuration)

今、タイプを再設計し、スレッドごとに 1 つのインスタンスを作成することを考えていましたが、ThreadStatic 属性に出くわしました。

プライベートなスレッド静的フィールドを宣言し、各スレッドが呼び出しているメイン メソッド内でそれを初期化し、すべてのサブメソッド内でこのフィールドを再利用して、パラメーターを廃止することは良い考えですか? それとも、スレッドごとに新しいインスタンスを作成することに集中する必要があるので、何か欠点がありますか?

[ThreadStatic]
private static MyConfiguration _configuration;
4

1 に答える 1

2

プライベートなスレッド静的フィールドを宣言し、各スレッドが呼び出しているメイン メソッド内でそれを初期化し、すべてのサブメソッド内でこのフィールドを再利用して、パラメーターを廃止することは良い考えですか?

いいえそうではありません; これは、スレッドに関係するコードが完全に信頼できなくなったことを意味します。またThreadPool、TPL やasync/awaitなどのスレッドは、最新のアプリケーションでは避けられません (コード内で明示的ではなく暗黙的であっても)。スレッドに依存する変数も、デバッグが非常に困難です。よほどの理由がない限り包括的なコンテキストを保持するか、既存の堅牢な実装にプラグインすることをお勧めします。たとえば、Web アプリケーションでは、静的メソッドを介して現在のリクエストに合理的にアクセスできますが、必要なものがすべて揃っているはずのワーカー スレッドに対して、リクエストスレッド上にいるかどうかを慎重に知る必要があります。皿の上に渡されたことを知っています。

于 2014-07-11T12:51:51.693 に答える