lovef_16 2023-05-04 23:16 采纳率: 100%
浏览 49
已结题

C#线程ID问题需要帮助

foreach循环中会启动几个Task,为了识别到线程结束,使用了他爹Task的方式。然后用”Thread.CurrentThread.ManagedThreadId“取得线程id。结果取得的id全部都是1呢。我不想要托管id,求帮助~~!


 Task dadyTask = new(() =>
                {
                    foreach (/*.....*/)
                    {
                        Host host = new();
                        new Task(() => host.GoGoGo(/*...*/), TaskCreationOptions.AttachedToParent).Start();
                    }
                });
                dadyTask.Start();
                dadyTask.ContinueWith(x => { ...});
  • 写回答

1条回答 默认 最新

  • 於黾 2023-05-05 09:05
    关注

    不要省略关键代码呀
    很显然这里foreach里的变量是关键
    这是个典型的闭包问题
    对于task来说,循环变量是个全局变量
    在定义匿名函数的时候只声明了需要使用全局变量,并没有传入变量的值
    而在调用的时候,变量的值已经全部变成最后一次迭代的值了
    你需要在循环内声明一个局部变量先保存foreach的值,再传递给task里面使用

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月13日
  • 已采纳回答 5月5日
  • 创建了问题 5月4日