다음과 같은 문제가 있습니다. 꽉 루프를 내 WPF 응용 프로그램의 MainWindow.cs 클릭 이벤트를 시작합니다.중첩 된 Parallel.For 루프 - 취소. 시도가 작동하지 않습니다.
이제 다른 버튼에 의해 트리거 된 중지 이벤트는 긴밀한 루프를 중지하고 작업을 종료해야합니다.
내 꽉 루프에서 나는 Parallel.For
루프가 있습니다. 아이디어는 내가 동시에 (Parallel.For)와 이것을 반복해서 (꽉 루프) 일정량의 일을해야한다는 것입니다. 이것이 최선의 접근 방법인지는 모르겠지만 그것이 가지고있는 유일한 방법입니다. :)
아무 것도하지 않는 것 같은 Cancellation.Token에 문제가 있습니다. 루프를 중지하고 작업을 올바르게 끝내려면 어떻게합니까?
var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
CancellationToken token = cts.Token;
ParallelOptions po = new ParallelOptions();
po.CancellationToken = cts.Token;
po.MaxDegreeOfParallelism = System.Environment.ProcessorCount;
Task dlTask = Task.Factory.StartNew(
() =>
{
do
{
Parallel.For(0, num, po, i => {
if (!token.IsCancellationRequested)
{
// do work
}
});
}
while (!token.IsCancellationRequested);
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
dlTask.ContinueWith(prev =>
{
//clean up
}, uiScheduler);
내가 po.CancellationToken.IsCancellationRequested
로와하지 않고 그것을 시도하고 멈추지 않았다 :
여기 내 코드입니다.
private void btnStop_Click(object sender, RoutedEventArgs e)
{
if (cts.IsCancellationRequested || po.CancellationToken.IsCancellationRequested)
{
cts.Cancel();
}
}
UPDATE : Damien_The_Unbeliever에 솔루션 덕분에 :
private void btnStop_Click(object sender, RoutedEventArgs e)
{
cts.Cancel();
}
제목 줄에 "(C#)"등을 쓰지 말고 태그를 사용하십시오. –
죄송합니다, 태그에 또한 추가했습니다. – user774326