실행중인 작업을 볼 수있는 방법이 없습니다. Task.Current 속성이 있지만 여러 작업이 실행중인 경우에는 어떻게됩니까? 이런 종류의 정보를 얻을 수있는 방법이 있습니까?작업 병렬 라이브러리에서 현재 실행중인 작업을 알 수있는 방법이 있습니까?
대체적으로 작업이 시작되거나 완료 될 때 알림을받을 수있는 방법이 있습니까?
실행중인 작업을 볼 수있는 방법이 없습니다. Task.Current 속성이 있지만 여러 작업이 실행중인 경우에는 어떻게됩니까? 이런 종류의 정보를 얻을 수있는 방법이 있습니까?작업 병렬 라이브러리에서 현재 실행중인 작업을 알 수있는 방법이 있습니까?
대체적으로 작업이 시작되거나 완료 될 때 알림을받을 수있는 방법이 있습니까?
안녕하세요. 마이크, TPL에서 대기중인 작업 목록에 액세스하는 공개 방법이 없습니다. 디버거에서 사용할 수있게하는 메커니즘은 모든 스레드가 열거 시간에 고정되므로 런타임에 사용할 수 없다는 사실에 의존합니다.
예, 작업 완료 알림을받는 방법이 내장되어 있습니다. Task.ContinueWith API를 확인하십시오. 기본적으로이 API는 대상 작업이 완료 될 때 실행될 새 작업을 만듭니다.
당신이 이것을 바탕으로 몇 가지 간단한 회계/진행보고를하고 싶다고 가정합니다. 그렇다면 TaskContinuationOptions.ExecuteSynchronously 플래그로 task.ContinueWith()를 호출하는 것이 좋습니다. 대상 작업이 완료 될 때 동일한 스레드에서 연속 작업이 바로 실행되도록 지정하면이 작업을 지정하지 않으면 계속 작업이 다른 일반 작업처럼 대기열에 포함됩니다.
희망이 도움이됩니다.
Huseyin는
당신이 제공 한에서 TaskScheduler
클래스 유도를 만들 수 있습니다. 해당 클래스 내에서 모든 권한을 가지며 실행의 양측에 로깅을 추가 할 수 있습니다. 예를 들면 다음과 같습니다. http://msdn.microsoft.com/en-us/library/ee789351.aspx
또한 Taskfactory
을 클래스의 인스턴스와 함께 스케줄러로 사용해야합니다.
또한 반사와 현재 실행중인 작업 (또는 작업의 부모) 얻을 수 있습니다 :
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();
}
}
};
가 프로그래밍을 얻을 필요가 있는가, 또는이 디버깅입니다? 디버깅 용이라면 작업에 사용할 수있는 새로운 디버그보기를 알고 있습니까? –
프로그래밍 방식으로보고 싶습니다. 나는 새로운 디버그 뷰를 보았고 훌륭한 것들이지만,이 경우 내가 필요한 것은 아니다. –