我看不到的方式,看看哪些任务正在运行。 还有就是Task.Current财产,但如果有运行多个任务? 是否有一种方式来获得这种信息?
或者,是否有一个内置的方式,当一个任务开始或完成得到通知?
我看不到的方式,看看哪些任务正在运行。 还有就是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/library/ee789351.aspx
您还需要使用Taskfactory
与类作为调度的一个实例。