一梭键盘任平生 2022-10-12 11:15 采纳率: 100%
浏览 65
已结题

关于 Task.CompletedTask 的疑问

问题遇到的现象和发生背景

我在打印Task.CompletedTask.Id 时候 发现 当我没有创建任何Task的时候 可以打印出来一个已经完成的taskID = 1,此时我以为1是默认值 直到

用代码块功能插入代码,请勿粘贴截图
 using(CancellationTokenSource source = new CancellationTokenSource()) {
            Task task1 = Task.Factory.StartNew((obj) => {
                Console.WriteLine("开始执行task1任务:" + obj + " ID :" + Task.CurrentId);
            }, (object)"zzz", source.Token);
            Console.WriteLine("task1ID: " + task1.Id);
            Console.WriteLine("finishTaskID: " + Task.CompletedTask.Id);
        }

运行结果及报错内容

img

我的解答思路和尝试过的方法

我尝试等task1完成后再次打印

using(CancellationTokenSource source = new CancellationTokenSource()) {
            Task task1 = Task.Factory.StartNew((obj) => {
                Console.WriteLine("开始执行task1任务:" + obj + " ID :" + Task.CurrentId);
            }, (object)"zzz", source.Token);

            Console.WriteLine("task1ID: " + task1.Id);
            Thread.Sleep(1000);
            Console.WriteLine("task1 State: " + task1.Status);
            Console.WriteLine("finishTaskID: " + Task.CompletedTask.Id);
        }

img


我发现通过 Task.CompletedTask获取的task仍然不是task1

我想要达到的结果

我想直到Task.CompletedTask获取的既然不是我已经完成的任务那它到底是什么?

  • 写回答

4条回答 默认 最新

  • 「已注销」 2022-10-12 12:02
    关注

    就是一个独立的任务以区别于任何其他的任务,所以你取的时候都是不会和你创建的任务id相同。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 10月20日
  • 已采纳回答 10月12日
  • 创建了问题 10月12日