問題タブ [threadstatic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# でスレッド セーフ変数を作成する
複数のオブジェクトの複数のスレッドによってアクセスされる静的変数があります。問題は、あるスレッドで値を設定すると、別のスレッドに反映されないことです。この問題を解決するために、変数スレッドを静的にしましたが、あるスレッドで変更された値は別のスレッドに反映されます。それが私が変数を宣言した方法です:
問題を解決する方法について何か提案はありますか?
c# - [ThreadStatic] の使用は非同期コードと矛盾していますか?
ASP.NETの上に構築されたさまざまなWebサービス用のかなり大きな既存のコードベースがあり、そのコードはアクセスを多用しますHttpContext.Current.User
( としてラップされます)。これは、アンビエントスコープを提供するためにClient.User
内部的に使用されると確信しています。[ThreadStatic]
の形式でより多くの非同期コードを使用し始める可能性があるかどうかを現在調べていますが、 の使用がこれにどのように適合するasync/await
かを見つけるのに苦労しています。[ThreadStatic]
頻繁に使用されるため、依存を取り除くこと[ThreadStatic]
は実際には不可能です。
await
がヒットすると、コードの実行がそこで停止し、呼び出しがすぐに返され、非同期コードが返されたときに実行を継続するように継続が設定されていることを理解しています。一方、元のスレッドは、別の要求を処理するなど、他の用途に自由に使用できます。ここまでは私の理解です。
決定的な答えが本当に見つからないHttpContext.Current.User
のは、 が の前後で同じであることが保証されているかどうかawait
です。
だから基本的に:
それはDebug.Assert
成功することが保証されていますか?
Task.Delay
別のリクエストが保留中と同じスレッドによって処理された場合、そのリクエストは別HttpContext.Current.User
の を設定するので、継続が呼び出されたときに以前の状態が何らかの方法で保存および復元されますか?
私が想像できるのは、舞台裏で[ThreadStatic]
状態がスレッド自体のある種の辞書として保持され、スレッドがその辞書に戻った後にスレッドプールに戻ると、await
その辞書はどこかに安全に保管され、スレッドに戻されるということです。それは継続を実行します(または、スレッド上で、継続を処理するのが必ずしも同じスレッドであるかどうかはわかりません)。一部は私の想像にすぎないかもしれません。
それはある程度正確ですか?
更新:これを試みる小さなテストをまとめようとしました。これまでのところ、機能しているようで、何百ものリクエストのうち、アサーションが失敗したことはありません。テストが理にかなっていることを誰でも確認できますか?
c# - CRM 2011 OrganizationService 破棄
CRM 2011 と通信する ASP.NET MVC アプリを作成しています。Xrm.Client.Services.OrganizationService を使用しています。これには、シングルトン パターンが用意されています。
負荷がかかると、ObjectDisposedException が発生します (破棄されたオブジェクトにアクセスできません)。シングルトンはここに行く方法ではないと考えています。
[ThreadStatic] シングルトン、またはサービスのプール、または役立つ可能性があるものを検討しています。確立できる CRM への接続数に制限があることを知っている人はいますか? 以前に廃棄サービスを経験した人はいますか?一度に CRM に接続する組織サービスが多すぎると問題が発生する可能性があると聞いたので、CRM へのヒットごとに新しい組織サービスを作成しないのはそのためです。
ご協力いただきありがとうございます。さらに説明が必要な場合は、お問い合わせください。
c# - .NET プロファイラーから ThreadStatic フィールドにアクセスする
stackoverflow のこの質問では、[ThreadStatic] の実装方法を尋ねています: ThreadStatic 属性はどのように機能しますか?
Thread オブジェクトの拡張と見なすべきだと提案する人もいました。それがwin32 TLSに基づいていることを意味するかどうかはわかりません。
私の質問は、.NET プロファイラー コードの現在のスレッドから [ThreadStatic] の値に何らかの方法でアクセスできるかということです。つまり、ネイティブ コードです。
たとえば、win32 スレッド ID を使用して、すべてのスレッド静的フィールドがあるメモリ内の領域を見つけ、取得する必要がある特定のフィールドを見つけることができたとします。
どうも