有没有办法知道哪些任务在任务并行库正在运行?(Is there a way to tell whic

2019-07-22 02:08发布

我看不到的方式,看看哪些任务正在运行。 还有就是Task.Current财产,但如果有运行多个任务? 是否有一种方式来获得这种信息?

或者,是否有一个内置的方式,当一个任务开始或完成得到通知?

Answer 1:

嘿麦克,在访问的TPL尚未完成的任务列表中没有公开的方式。 这使得它可用于调试的机制依赖于一个事实,即所有的线程将在统计时被冻结,因此它不能在运行时使用。

是的,有一个内置的方式在任务完成得到通知焕。 退房Task.ContinueWith的API。 基本上这个API创建目标任务完成时,将发射了一个新的任务。

我假设你想要做一些快速的会计/进度基于这个报告,如果是那样的话,我建议您致电task.ContinueWith()与TaskContinuationOptions.ExecuteSynchronously标志。 当指定的持续行动将在那里同一个线程上,当目标任务完成运行(如果你不指定延续这个任务排队,像任何其他常规任务)。

希望这可以帮助。

侯赛因



Answer 2:

你也可以得到反映当前正在运行的任务(或任务的父):

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();
        }
    }
};


Answer 3:

您可以创建一个TaskScheduler类从提供的一个派生。 在这一类,你有完全的控制,并可以添加记录执行的两侧。 例如见: http://msdn.microsoft.com/en-us/library/ee789351.aspx

您还需要使用Taskfactory与类作为调度的一个实例。



文章来源: Is there a way to tell which Tasks are currently running in Task Parallel Library?