현재 작업 병렬 라이브러리에서 현재 실행중인 작업을 알리는 방법이 있습니까?
-
20-09-2019 - |
문제
어떤 작업이 실행 중인지 볼 수있는 방법을 볼 수 없습니다. 전류 속성이 있지만 여러 작업이 실행되면 어떻게됩니까? 이런 종류의 정보를 얻을 수있는 방법이 있습니까?
또는 작업이 시작되거나 완료 될 때 알림을받을 수있는 내장이 있습니까?
해결책
Mike, TPL에서 보류중인 작업 목록에 액세스하는 공개 방법은 없습니다. 디버거에 사용할 수있게하는 메커니즘은 모든 스레드가 열거 시간에 동결 될 것이라는 사실에 의존하므로 런타임에 사용할 수 없습니다.
예, 작업이 완료된 상태에서 알림을받을 수있는 내장이 있습니다. 작업을 확인하십시오. 기본적 으로이 API는 대상 작업이 완료되면 발사 될 새로운 작업을 만듭니다.
이를 기반으로 빠른 회계 / 진행보고를 수행하고 싶다고 가정합니다.이 경우 작업을 수행하는 작업을 수행하는 것이 좋습니다. 대상 작업이 완료 될 때 연속 조치가 동일한 스레드에서 바로 실행되도록 지정할 때 (이를 지정하지 않으면 연속 작업은 다른 일반 작업과 마찬가지로 대기됩니다).
도움이 되었기를 바랍니다.
Huseyin
다른 팁
또한 현재 실행중인 작업 (또는 작업의 부모)을 반영 할 수 있습니다.
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();
}
}
};
당신은 a를 만들 수 있습니다 TaskScheduler
제공된 수업에서 파생. 해당 클래스 내에서 완전히 제어 할 수 있으며 실행의 양쪽에 기록을 추가 할 수 있습니다. 예를 들어 : 참조 : http://msdn.microsoft.com/en-us/library/ee789351.aspx
또한 사용해야합니다 Taskfactory
스케줄러로 클래스 인스턴스를 사용합니다.