현재 작업 병렬 라이브러리에서 현재 실행중인 작업을 알리는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1551537

문제

어떤 작업이 실행 중인지 볼 수있는 방법을 볼 수 없습니다. 전류 속성이 있지만 여러 작업이 실행되면 어떻게됩니까? 이런 종류의 정보를 얻을 수있는 방법이 있습니까?

또는 작업이 시작되거나 완료 될 때 알림을받을 수있는 내장이 있습니까?

도움이 되었습니까?

해결책

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 스케줄러로 클래스 인스턴스를 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top