2013-06-03 7 views
6

私はWCFサービスを持っており、データベースへの各呼び出しを記録します。後で、例外が発生した場合は、別のデータベースにも記録されます。C#のスレッドコンテキストは正確に何ですか?

これらの両方のログを結びつけて、例外が発生している可能性があることがわかりました。これを行うために、私は一呼出しごとに得ることができる一意のIDをいくつか求めました。

スレッド全体が1つのスレッドで実行されているので、たとえば、スレッド名をGUIDに設定できます。 System.Threading.Thread.CurrentThread.Name = Guid.NewGuid().ToString();しかし、これは少しハッキーです。

ネットを検索すると、私はSystem.Threading.Thread.CurrentContext.SetProperty()を発見しましたが、そのコンテキストが何であるか正確には疑問に思っています。スレッドの持続時間の間プロパティを格納するように設計されていますか?スレッドごとにユニークですか?

5つの同時WCFコールがある場合、「コールごとに」発言していなければ、コンテキスト内で起こっていることの間に矛盾が生じないようにしたいと思います。

誰かが明確にできるでしょうか?

答えて

5

Microsoftはそれだけで内部的に使用するためだと言うので、私はそのプロパティを使用することはありません。

"This API supports the .NET Framework infrastructure and is not intended to be used directly from your code."

しかし、あなたが事の同じ種類を行うためにThread Local Storageを使用することができるはずです。このリンクは、スレッドの文字列プロパティを設定する方法の例を示しています。

も参照してください。http://www.c-sharpcorner.com/UploadFile/1d42da/working-with-thread-local-storagetls-in-C-Sharp/

+0

おかげさまで、ありがとう! – NibblyPig

+2

アップデートとして、.NET 4.6を使用している場合は、 'ThreadLocal'から' 'AsyncLocal'(https://msdn.microsoft.com/en-us/library/dn906268(v=vs.110)に切り替える必要があります。 ).aspx)を使用すると、ストレージを非同期/待機の境界を越えて流れることができ、スレッドをジャンプする可能性があります。 –

関連する問題