2016-03-16 18 views
6

asp.net Web APIを使用しているときに、CallContextを要求全体に頼りにすることはできますか?Web APIを使用してCallContextを使用できますか?

私はdecade-old blog postを読んでいますが、まだそれが適用されるかどうかはわかりません(尋ねられた通りthere)。

スレッドアジリティが導入されていると仮定して、グローバルフィルタでデータを設定した場合、要求が通過すると想定するのは安全でしょうか?

+0

私はCallContext.LogicalSetDataと非同期コントローラをテストしてきたが(それは前にスレッドを切り替える作りますそしてその後)それはうまくいくようです。しかし、それは非常に複雑なテーマであり、簡単なテストを実行するだけでは分かりません。 – Evk

答えて

2

ASP.Netがスレッドを切り替えると、CallContextが失われます。非同期モデルでは、asp.netタスクスケジューラは、同一のスレッドである必要はなく、同一のHttpContextを持つ要求スレッドに非同期呼び出しを参加させることに注意します。

例:要求が開始された後、非同期的に遅いIOが返されるまで待っています。遅いIOを待っている間は、要求スレッドは何もしていないので何もしません別の要求に使用されます。

ASP.NetはThread Agility(それをグーグル)に大きな運動であり、ここではこれについての素晴らしい議論もあります:CallContext vs ThreadStatic vs HttpContext

+0

CallContext.LogicalSetDataと.LogicalGetDataは、非同期で動作するはずです。 – imukai

+0

@imukai 'CallContext'はリモーティングのために設計されています。あなたは正しいです - 非同期で動作するはずですが、誰の言葉ですか? Asyncが存在する前に設計されています。私が見つけることができる場所はどこにも書かれていません。私が持っている唯一の情報は、議論している他の人のスレッドを読むことであり、誰もasp.net内の 'CallContext'の動作に同意していないようです。この目的のために設計されたAsyncLocalを使用するほうがずっと優れています。*は*文書化されています。 – caesay

関連する問題