有没有办法知道哪些任务在任务并行库正在运行?
-
20-09-2019 - |
题
我不明白的方式,看看哪些任务正在运行。还有就是Task.Current财产,但如果有运行多个任务?是否有一种方式来获得这种信息?
或者,有没有内置的方式任务开始或完成时得到通知?
解决方案
嘿麦克,在访问的TPL尚未完成的任务列表中没有公开的方式。这使得它可用于调试器机制依赖于以下事实:所有的线程将在枚举时间被冻结,因此它不能在运行时使用。
是的,有一个内置的方式得到通知焕任务完成。退房Task.ContinueWith的API。基本上这个API创建目标任务完成时,将发射了一个新的任务。
我假设你想要做一些快速的会计/进度在此基础上申报,如果是那样的话,我建议您致电task.ContinueWith()与TaskContinuationOptions.ExecuteSynchronously标志。当指定的持续行动将在那里同一个线程上,当目标任务完成运行(如果你不指定延续这个任务排队,像任何其他常规任务)。
希望这有助于。
侯赛因
其他提示
您还可以得到当前正在运行的任务(或任务的母公司)与反思:
static public class Extensions
{
public static Task Parent(this Task t)
{
FieldInfo info = typeof(Task).GetField("m_parent",
BindingFlags.NonPublic | BindingFlags.Instance);
return info != null ? (Task)info.GetValue(t) : null;
}
public static Task Self
{
get
{
return Task.Factory.StartNew(
() => { },
CancellationToken.None,
TaskCreationOptions.AttachedToParent,
TaskScheduler.Default).Parent();
}
}
};
可以创建一个TaskScheduler
类从所提供的一个导出。在这一类,你有完全的控制,并可以添加记录执行的两侧。见例如: http://msdn.microsoft.com/en-us/库/ ee789351.aspx
您还需要使用一个Taskfactory
与类作为调度的一个实例。
不隶属于 StackOverflow