gpt4 book ai didi

.net - .NET Framework线程 “ancestry”

转载 作者:行者123 更新时间:2023-12-03 13:18:11 26 4
gpt4 key购买 nike

我正在寻找一种方法来确定最初在哪个线程上生成它的线程。我不知道是否存在执行此操作的机制,类似于用于.NET 4的新Task Parallel Library中Tasks的“Parent”属性

编辑:
实际上,进一步的调查似乎表明没有位置可以存储此信息,因此,如果没有真正丑陋的骇客,这似乎不可能透明地实现。

因此,尽管我必须自己寻找替代设计,但我认为我将接受以下示例代码作为解决该问题的最可行(非透明)答案。谢谢 :)

最佳答案

系统内部未提供此类功能。您可以很容易地将父线程的线程ID传递给线程启动函数:

static class ThreadSpawner
{
[ThreadStatic]
private static int parentThreadId;
public static int ParentThreadId
{
get { return parentThreadId; }
}

private class ThreadInfo
{
public int ParentId;
public Action Method;
}

private static void StartThread(object parameter)
{
var threadInfo = (ThreadInfo)parameter;
parentThreadId = threadInfo.ParentId;
threadInfo.Method();
}

public static void Spawn(Action start)
{
new Thread(StartThread).Start(
new ThreadInfo {
Method = start,
ParentId = Thread.CurrentThread.ManagedThreadId
});
}
}


// Usage:
ThreadSpawner.Spawn(MyMethod);

static void MyMethod() {
Console.WriteLine(ThreadSpawner.ParentThreadId);
}

关于.net - .NET Framework线程 “ancestry”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/903956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com