我不明白的方式,看看哪些任务正在运行。还有就是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与类作为调度的一个实例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top