中午不睡会死x 2023-03-27 10:58 采纳率: 25%
浏览 74
已结题

C#Task类中的Console.WriteLine()和Debug.WriteLine()打印失效

C#的Console.WriteLine()和Debug.WriteLine()无效

在学习多线程时将下面链接中的示例沾到本地运行,发现打印不出东西

img

这是本地的代码:

using System;
using System.Diagnostics;

/*
 * ContinueWith可以传入TaskContinuationOptions枚举类参数来影响线程的运行方式。
 */
namespace TaskContinuationOptionsApplication
{
    public class TaskContinuationOptionsTest
    {
        public static void DoSomething(string name, int time = 2000)
        {
            Debug.WriteLine($"DoSomething--Start--{name}--{Thread.CurrentThread.ManagedThreadId.ToString("00")}--{DateTime.Now.ToString("HH:mm:ss.fff")}");
            Thread.Sleep(time);
            Debug.WriteLine($"DoSomething--End--{name}--{Thread.CurrentThread.ManagedThreadId.ToString("00")}--{DateTime.Now.ToString("HH:mm:ss.fff")}");
        }

        public static void Main(string[] args )
        {
            /*
             * none:默认情况
             */
            #region
            Task task1 = new Task(() =>
            {
                DoSomething("task1");
            });
            Task task2 = task1.ContinueWith(t =>
            {
                DoSomething("task2");
            });
            Task task3 = task2.ContinueWith(t =>
            {
                DoSomething("task3");
            });
            task1.Start();
            Debug.WriteLine(task3 + " " + task2.ToString() + " " + "1111");
            #endregion
        }
    }
}

这是本地运行结果:
请问这是为什么,在Task外面是可以打印出来的,是Task的问题吗?
另外请问@李宥小哥 ,方便的话帮我看一下,谢谢

img

  • 写回答

1条回答 默认 最新

  • 於黾 2023-03-27 11:10
    关注

    你主函数退出的太快了,子线程还没等启动主线程都执行完了
    主线程结束,整个进程也就结束了
    task是个异步操作,它不是threading那种线程,那种是独立运行的,主线程结束了子线程还可以运行

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

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 已采纳回答 3月28日
  • 修改了问题 3月27日
  • 修改了问题 3月27日
  • 展开全部