2012-09-14 2 views
5

내 클래스에는 TaskCompletionSource<int>을 사용하여 Task<int> 개체를 생성하는 메서드가 있습니다. 그런 다음 비동기 작업을 수행하고 결과를 설정합니다. 나는 작업의 ContinueWith 방법 여부를 신뢰할 수 있는지 여부를 알고 있어야합니다작업의 연속을 취소하는 방법은 무엇입니까?

public Task<int> CalculateAsync() 
{ 
    var source = new TaskCompletionSource(); 
    DoSomeAsyncStuffAndSetResultOf(source); 

    source.Task.ContinueWith(t => Console.WriteLine("Is this reliable?")); 
    return source.Task; 
} 

CalculateAsync 메소드의 호출자가 생산 작업과 뭔가를 실행에서의 계속을 방지 할 수 있습니까?

답변

4

CancellationTokenContinueWith ...의 다양한 오버로드에 전달할 수 있습니다. 이는 연속 IMO를 취소하는 가장 관용적 인 방법 일 것입니다.

계속을 취소 하시려면 학부모 할 수있는 일이 없다고 생각됩니다. 어쨌든 나는 희망이 없다.

EDIT : 좋아, 너는 시도하고있는 것처럼 들린다. 그런 일이 일어나야한다. 아니, 걱정할 필요가 없습니다. 호출자가 작업을 완료하지 않고 영원히 계속 실행하거나 취소 또는 오류가 발생하지 않는 한 연속이 실행됩니다.

+0

오, 알겠습니다. 계속합니다 (호출자가 작업을 단순히 영원히 계속 실행하도록 강요 할 수는 없으며 완료하지 않는다고 가정 할 때). –

+0

수정 사항을 본 후 댓글을 삭제했습니다. 작업 결과를 설정하기 전에 Dispose를 호출하면 어떻게됩니까? –

+1

@ ŞafakGür : Task.Dispose의 문서에 따라 InvalidOperationException이 발생합니다. –

관련 문제