获取任务状态 WaitingForChildrenToComplete 的示例代码
Example code for getting task status WaitingForChildrenToComplete
请给出获取任务状态 WaitingForChildrenToComplete 的示例代码。
我按照自己的想法做了一个例子,但是没有给出想要的状态。
using System;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
void MyMethod1()
{
Console.WriteLine("MyMethod1");
}
void MyMethod2(Task task)
{
Console.WriteLine("MyMethod2");
Task MyTask = new Task(() => { Thread.Sleep(1000); Console.WriteLine(task.Status); }, TaskCreationOptions.AttachedToParent);
MyTask.Start();
Thread.Sleep(5000);
}
Task MyTask = null;
MyTask = Task.Run(() => MyMethod2(MyTask));
MyTask.Wait();
}
}
}
这是一个例子:
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
Task parent = Task.Factory.StartNew(() =>
{
Task child = Task.Factory.StartNew(() => Thread.Sleep(200),
TaskCreationOptions.AttachedToParent);
});
Thread.Sleep(100);
Console.WriteLine($"Status: {parent.Status}");
}
}
输出:
Status: WaitingForChildrenToComplete
您的示例不起作用的原因是 Task.Run
方法是使用 TaskCreationOptions.DenyChildAttach
option. You can read about this here 配置的 Task.Factory.StartNew
的快捷方式。
注意: 上面的示例旨在最小化,因此不遵循最佳实践。特别是 Task.Factory.StartNew
方法没有配置特定的 scheduler
,现在很少使用 is not recommended, and might produce compiler warnings. Also be aware that the "attach to parent" 功能。据我所知,它在推出后不久就被微软自己认为是一个可疑模式,今天许多微软工程师很乐意回到过去并un-invent这个功能,如果回到过去是可能的话。
请给出获取任务状态 WaitingForChildrenToComplete 的示例代码。 我按照自己的想法做了一个例子,但是没有给出想要的状态。
using System;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
void MyMethod1()
{
Console.WriteLine("MyMethod1");
}
void MyMethod2(Task task)
{
Console.WriteLine("MyMethod2");
Task MyTask = new Task(() => { Thread.Sleep(1000); Console.WriteLine(task.Status); }, TaskCreationOptions.AttachedToParent);
MyTask.Start();
Thread.Sleep(5000);
}
Task MyTask = null;
MyTask = Task.Run(() => MyMethod2(MyTask));
MyTask.Wait();
}
}
}
这是一个例子:
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
Task parent = Task.Factory.StartNew(() =>
{
Task child = Task.Factory.StartNew(() => Thread.Sleep(200),
TaskCreationOptions.AttachedToParent);
});
Thread.Sleep(100);
Console.WriteLine($"Status: {parent.Status}");
}
}
输出:
Status: WaitingForChildrenToComplete
您的示例不起作用的原因是 Task.Run
方法是使用 TaskCreationOptions.DenyChildAttach
option. You can read about this here 配置的 Task.Factory.StartNew
的快捷方式。
注意: 上面的示例旨在最小化,因此不遵循最佳实践。特别是 Task.Factory.StartNew
方法没有配置特定的 scheduler
,现在很少使用 is not recommended, and might produce compiler warnings. Also be aware that the "attach to parent" 功能。据我所知,它在推出后不久就被微软自己认为是一个可疑模式,今天许多微软工程师很乐意回到过去并un-invent这个功能,如果回到过去是可能的话。