Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(207评价)
优惠后 ¥1899.00优惠前 ¥2499.00 双十一全年最大力度限时优惠
1对1 答疑即时回复7天无理由退款30天价保提问必答

服务保障

1对1 答疑

提供专属的一对一在线答疑,快速答疑解惑。

即时回复

及时响应学习咨询,帮助解决问题。

7天无理由退款

购买后7天内可申请无理由退款。

30天价保

购买后30天内如遇降价,可申请价保。

提问必答

对于提问做到有问必答,帮您扫清学习过程中的种种障碍

C# 线程 Task 父任务与子任务问题
JexFong发起了问答2021-07-22
1
回复
820
浏览
    使用一个任务开启线程,这个任务中再开启一个子任务,然而理论上父任务会在子任务结束之后,状态才会变为
RunToCompletion,子任务结束之前因该为WaitingForChildrenToComplete,然而我写出的代码运行后没有等待子任务的状
态,直接父任务结束之后父任务状态就变为RunToCompletion,没有父子任务关联了。难道现在C#去掉父子任务了嘛


源码:
private static void Example10()
{
    _parentTaskCheck = true;
    var parent = new Task(Example10_ParentTask);
    parent.Start();
    while (_parentTaskCheck)
    {
        
        Console.WriteLine("parent task status: " + parent.Status);
        Thread.Sleep(500);
    }

    Console.WriteLine(parent.Status==TaskStatus.WaitingForChildrenToComplete);
}

private static void Example10_ParentTask()
{
    Console.WriteLine("parent task is running.");
    var child = new Task(Example10_ChildTask);
    child.Start();
    Thread.Sleep(1000);
    Console.WriteLine("parent task is over.");
}

private static bool _parentTaskCheck;
private static void Example10_ChildTask()
{
    Console.WriteLine("child task is running.");
    Thread.Sleep(5000);
    Console.WriteLine("child task is over.");
    _parentTaskCheck = false;
}
输出结果:

parent task is running.
parent task status: WaitingToRun
child task is running.
parent task status: Running
parent task is over.
parent task status: Running
parent task status: RanToCompletion
parent task status: RanToCompletion
parent task status: RanToCompletion
parent task status: RanToCompletion
parent task status: RanToCompletion
parent task status: RanToCompletion
parent task status: RanToCompletion
child task is over.
RanToCompletion


 

所有回复
发表回复
你还没有登录,请先 登录或 注册!