.net에서 비동기 프로그래밍에 대한 몇 가지 테스트를 시작하고 있습니다. 이제는 cancellationToken을 사용하여 긴 작업을 취소하려고 노력하고 있습니다.작업이 실행되는 동안 비동기 취소
그래서 나는 다음과 같은 코드를 가지고 :
private void button2_Click(object sender, EventArgs e)
{
cancelationToken.Cancel(true);
}
private void button1_Click(object sender, EventArgs e)
{
StartOperation(cancelationToken.Token);
}
그리고 마지막으로 내 작업
private async void StartOperation(CancellationToken cancelToken)
{
await GetItensFromDatabase2(cancelToken);
}
public static Task<int> GetItensFromDatabase(CancellationToken cancelToken)
{
//cancelToken.Register(() => Console.WriteLine("Canceled"));
return Task.Factory.StartNew<int>(() =>
{
int result = 0;
cancelToken.ThrowIfCancellationRequested();
result = MyLongOperation(); // Simulates my operation -> I want to cancel while this operation is still running
return result;
}, cancelToken);
}
작업을 시작
CancellationTokenSource cancelationToken = new CancellationTokenSource();
내 버튼 그래서, MyLongOperation을 취소하는 방법() 방법? 할 수 있습니까?
'async' 코드는'StartNew' 대신'Task.Run'을 사용하십시오; [왜 내 블로그에서 설명할까요?] (http://blog.stephencleary.com/2013/08/startnew-is-dangerous.html). –
Task.Run이 .net 4에 존재하지 않습니다. – mmarques
'Microsoft.Bcl.Async'에서, 그것은'TaskEx.Run'입니다. –