, er der flere krav til at tillade annullering af en opgave.først skal man skabe et symbol, som vil bidrage til at koordinere annullering.det symbolske i sig selv er et eksempel på den cancellationtoken struktur.det er ikke et instantierede ved hjælp af en konstruktør.i stedet, du skaber et tilfælde af cancellationtokensource klasse og læse tegn fra sin symbolske ejendom., 4 indfører en let føre. net kaldet cancellationtoken, der tilvejebringer en mekanisme til at annullere synkrone og asynkrone operationer.her er nogle vigtige medlemmer af dette føre:,, iscancellationrequested - en boolean ejendom, der kan være blevet adspurgt af koden for at finde ud af, om det er blevet annulleret eller annullering, er blevet anmodet om, register - at registrere en repræsentant for denne, når en anmodning om annullering, har fundet sted.,, ved at skabe opgaver til støtte for annullering, du give tegn til den opgave, og' s konstruktøren ud over den delegerede at henrette.den symbolske skal også være tilgængelige inden for den delegerede, så du kan få adgang til dets egenskaber og metoder.disse omfatter iscancellationrequested ejendom, og der kommer en boolean - værdi, der angiver, om annullering af har eller ikke har anmodet om., den sidste del af støtte til annullering, er at sikre, at deres opgave kan stoppe yndefuldt og forlade systemet i en gyldig.inden for langvarige opgaver, bør du regelmæssigt at kontrollere, hvis opgave er blevet aflyst, og, hvis det er, er der nogen dekontamineringsarbejde før forlader.dette kan omfatte lukning af filer eller database forbindelser, færdiggøre eller omgøre transaktioner og bortskaffelse af ressourcer.det bør bemærkes, at anmode om annullering, aldrig vil tvinge en opgave at standse.hvis man ignorerer en annulleringsanmodning din opgave vil fortsætte gennemførelsen indtil fuldstændig eller indtil det kaster en undtagelse., kan vi se dette mønster i vores første eksempel.i den vigtigste metode, skaber vi en cancellationtokensource og bruge den til at få et tegn.vi vil videregive denne gave til vores opgave, og' s konstruktøren.i dette tilfælde lambda udtryk, som definerer den opgave og' s aktioner kræver en særskilt metode.det er at gøre strukturen af den opgave, annullering mønster lettere at se.efter at opgaven er begyndt, vi venter til brugeren til at presse ind før at annullere opgaven ved at cancellationtokensource ' s - metode.det siger alle opgaver, som brugte sit tokens, som de bør holde op med at udføre.,, dolongrunningtask metode kaldes inden for parallelle opgave.den simulerer en langvarige proces med ni hundrede gange, og en anden og mellem hver udgave.før det begynder, iscancellationrequested ejendom i den symbolske kontrolleres.det er muligt, at det kunne have været inddraget, før det var begyndt at udføre denne kontrol kan det stoppes uden at udføre noget arbejde.den iscancellationrequested flag kontrolleres igen under hver udgave.hvis det er sandt, et budskab er klart synlig og løkken udgange.,, prøver at løbe den kode, og tillade, at et par iterationer til fuldstændig, før man kommer ind til at aflyse opgaven.,, static void Main() ,, { ,, var tokenSource = new CancellationTokenSource(); ,, var token = tokenSource.Token; ,, var task = new Task(() => DoLongRunningTask(token), token); ,, Console.WriteLine("Press Enter to cancel"); ,, task.Start(); ,, Console.ReadLine(); ,, tokenSource.Cancel(); ,, task.Wait(); ,, task.Dispose(); ,, Console.WriteLine("Press Enter to exit"); ,, Console.ReadLine(); ,, } ,, static void DoLongRunningTask(CancellationToken token) ,, { ,, if (token.IsCancellationRequested) ,, { ,, Console.WriteLine("Cancelled before long running task started"); ,, return; ,, } ,, for (int i = 0; i <= 100; i++) ,, { ,, Console.WriteLine("{0}%", i); ,, Thread.Sleep(1000); ,, if (token.IsCancellationRequested) ,, { ,, Console.WriteLine ("aflyst"), pause,,,,,,,,