Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7088205
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 28, 20262026-05-28T07:46:12+00:00 2026-05-28T07:46:12+00:00

I had an idea for solving the problem of enumerating managed threads in .Net

  • 0

I had an idea for solving the problem of enumerating managed threads in .Net and for tracking thread ancestry (which thread created which other thread).

If it were possible to tag a Thread object with an object of the programmer’s making that is automatically copied to children threads when they are created, it might be possible to use that tag to track when new threads are created, who created them, etc. The inspiration came from unix, where, when a process is forked, it inherits open file handles, etc. If there were some piece of data that is 1) thread-local or tied to a Thread object and 2) is automatically copied to new threads and 3) is modifiable, that would be a good start.

I’m guessing that we’ll have to use reflection to access members of some of the Thread object that starts the chain because most of what i see in the thread that might be useful is otherwise locked up, but it’s an start. I’m not sure how wise this approach is though.

Edit:
I think I’ll explain my use case better because I don’t think anybody understands.

I know about tracking threads explicitly, which I’ve done widely in code i own before. That’s not the problem.

Basically, I’m trying to implement a ‘thread-group-context’, much in the same way that .Net has an appdomain-context, a remoting context [1] and an assembly-thread combination-local context [2].

For a given group of threads that were spawned from a common thread, I want to associate information with that grouping. While I understand that .Net doesn’t have this concept (else I would have no problem!), it doesn’t change the fact that every managed thread in .Net was created by one and only one other managed thread, and thus, can be drawn in a tree structure.

The problem I am trying to solve is thus: I have an API, that has an context object. This API calls into a large external library of code that does real work, and does so starting from a thread of its creation. That external does not explicitly get a copy of the API context object, however it would need one in order to make calls on the API. Since it does not have a reference to the API context object, it cannot make these calls. As things stand today, the external library does need to make calls, and to do so it looks up the current context object in a single static field, meaning that there can only be one instance of my API per AppDomain. I wish to fix this.

This external library is partly out of my control, and the interface between my API and the external library does not explicitly pass the context object. Up until now, when the external library needed to make calls into the API, it would look at a static field in my API to get a reference to the context object.

The problem is then that a final executable can only have one instance of my API session per AppDomain, because we’re using static fields to pass the context object to the external library (workhorse) code.

One option is to make a GetContextObject() method in my API. When the API spawns the thread to run the external library code, it would remember that thread in a shared static dictionary. When the external library code calls GetContextObject(), it would look up what thread it is running on and return the proper context object for that thread.

If the external library code never created its own threads, then I’d have no problem, I’d always have a 100% correct mapping of thread to context. However, the external library does make its own threads, and does so without my API being aware. When the API receives a call from those threads, it won’t know what context object to give up, and has to guess – if there’s only one context object registered, it uses that, otherwise, it throws an exception saying it can’t tell you.

If I could have data tagged to thread objects that is inherited by threads created by that parent thread, then I could implement this tracking system.

Also, the external library does not use the thread pool.

Basically, my options are thus:

1) Redesign the interface between my API and the external library to pass in the context object, and redesign the external library to correctly pass around this context object. Involves trundling through ~1 million LOC.

1a) Forbid the external library from directly using the Thread object, and instead require them to use my own MyApiThread object that, when created, adds itself to my custom tracking mechanism. Requires changing less code in the external library than option #1, but still involves a lot of rework.

2) Force the consumer of my API to start each API session in a new AppDomain so that I can store my context object in a static field (this is the ‘solution’ today). AppDomains involve a lot of overhead and I do not wish to force this upon my users.

3) Find a way to track thread ancestry to be able to return the correct context object to the code calling from the external library based on the calling thread. This is the subject of this post.

To those saying that Windows does not have a concept of child-parent threading, you are off base – that is irrelevant. DotNet is not a Windows-only system, and its very design was to isolate it from the machine and OS it is running on, which is why .Net exists for Linux, Solaris, FreeBSD in the form of Mono. Furthermore, Java does have the very concept of thread ancestry that I need, and Java is implemented on Windows, thus this is a very possible and reasonable concept. While I realize that the .Net api has a certain Microsoft-specific bend to it, realize that, largely, .Net and Windows are independent.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-28T07:46:13+00:00Added an answer on May 28, 2026 at 7:46 am

    In fact, I’ll make my comment an answer and point you at Jeffrey Richter.

    The CallContext class gives you the ability to store data for a “logical execution path”, which can cross threads and AppDomains.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I had an idea for a client-side language other than JavaScript, and I'd like
I always had the idea that the root namespace in .NET, System , was
I had an idea, but don't know if it could be possible to do
I honestly had no idea what to call this any other way (or what
I just discovered this problem today, and I had no idea what caused this
I just had an idea that I wonder whether is possible in java. Let's
I had en idea, which shortly explained was that i would like to load
Wondered if anyone had any idea why the following problem is occurring, or had
Sorry I had no idea how set a topic which could express what help
I had an idea, if I add a python .py file to my C#

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.