问题创建子任务

我一直在使用 C# 书籍查看子任务,而不是嵌套任务。以下示例是书中所说的,但是当我尝试完全相同的代码时,它返回一个错误:并非所有代码路径都返回类型为“Func”的 lambda 表达式中的值。


现在我已经检查了 10 多次我是否没有打错字或任何东西。但它完全一样。


我查了一些关于这个的问题,我发现通常添加“return”语句可以修复这个错误(在“Task”之前)。但是添加 return 并没有解决我的问题。


有人可以解释一下问题是什么吗?(下面的代码授予我错误)


public void RunChildTask2()

    {

        Task parent = Task.Run(() =>

        {

            Console.WriteLine("Parent task starting...");

            Task child = Task.Run(() =>

            {

                Console.WriteLine("Child task starting...");

                Thread.Sleep(1000);

                Console.WriteLine("Child task completed!");

            }, TaskCreationOptions.AttachedToParent);

        });

        parent.Wait();

        Console.WriteLine("Parent task completed!");

    }


慕少森
浏览 184回答 1
1回答

BIG阳

TaskCreationOptions调用时无法指定Task.Run。你需要使用Task.Factory.StartNew(() => {/*...*/}, TaskCreationOptions.AttachedToParent, default(CancellationToken), TaskScheduler.Default)顺便说一下,Task.Run默认情况下设置TaskCreationsOptions为DenyChildAttach,因此如果您想要一个子任务,您还需要TaskCreationOptions为父任务指定。所以它看起来像这样:Task parent = Task.Factory.StartNew(() =>{    Console.WriteLine("Parent task starting...");    Task child = Task.Factory.StartNew(() =>    {        Console.WriteLine("Child task starting...");        Thread.Sleep(1000);        Console.WriteLine("Child task completed!");    }, TaskCreationOptions.AttachedToParent, default(CancellationToken), TaskScheduler.Default);}, TaskCreationOptions.None, default(CancellationToken), TaskScheduler.Default);parent.Wait();
打开App,查看更多内容
随时随地看视频慕课网APP