2017-01-13 13 views
2

TPLを使用して自分のコードで新しいタスクを作成しています。すべてがパフォーマンスを改善します。 context.currentuser.iDentifierのようなHTTPContextオブジェクトがあるときはいつでも。このコードはHTTP Contextオブジェクトが利用できないという例外をスローします。 null参照例外です。 コンテキストオブジェクトをタスクオブジェクトに渡す方法を知りたいですか?タスク並列ライブラリタスクを使用中にhttpcontextオブジェクトを使用できないのはなぜですか?

+0

[?とNullReferenceExceptionは何ですか、と私はそれを修正しますか](の可能性のある重複http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – rene

+0

HttpContext.Currentは、着信要求を処理するスレッドでHttpContext.Currentにアクセスする場合のみ、nullではありません。 TPLでは、コードを別のスレッドで実行することができます。詳細 - http://stackoverflow.com/questions/19509672/why-is-httpcontext-current-null – Nikolay

+0

@rene、これは重複していません。あなたが言及した質問は、汎用の.NETフレームワークのnull参照例外です。 – kevalsing

答えて

5

これは、並列スレッドが同じコンテキストで実行されていないためです。あなたはSynchronizationContextを渡す必要があります。 TPLでは、TaskScheduler.FromCurrentSynchronizationContext()を使用してコンテキストを渡すことができます。

は私のプロジェクトの一つで、私はこのようにそれに何かを行っている -

Task.Factory.StartNew(() => MyMethod(), 
          CancellationToken.None, 
          TaskCreationOptions.None, 
          TaskScheduler.FromCurrentSynchronizationContext()); 
関連する問題