class DemoCancelTask {
// , , static void MyTask(Object ct) {
CancellationToken cancelTok = (CancellationToken) ct;
// , , . cancelTok.ThrowIfCancellationRequested();
Console.WriteLine("MyTask() ");
for(int count = 0; count < 10; count++) {
// , if(cancelTok.IsCancellationRequested) {
Console.WriteLine(" ."); cancelTok.ThrowIfCancellationRequested();
}
Thread.Sleep(500);
Console.WriteLine(" MyTask() " + count);
}
Console.WriteLine("MyTask ");
}
static void Main() {
Console.WriteLine(" .");
// .
CancellationTokenSource cancelTokSrc = new CancellationTokenSource();
// , .
Task tsk = Task.Factory.StartNew(MyTask, cancelTokSrc.Token,
CancelTokSrc.Token);
// .
Thread.Sleep(2000); try {
// . cancelTokSrc.Cancel();
// Main() ,
// tsk. tsk.Wait();
} catch (AggregateException exc) { if(tsk.IsCanceled)
Console.WriteLine(" tsk \");
// :
// Console.WriteLine(exc);
} finally {
Tsk.Dispose(); cancelTokSrc.Dispose();
}
Console.WriteLine(" .");
}
}
. 2 .
.
MyTask()
.
tsk
.
, MyTask () Main () . , MyTask () . AggregateException, . tsk , , . , , , AggregateException , , , .
, AggregateException. , , .
. . , , , , .
|
|
AggregateException, , . Flatten (), AggregateException AggregateException. , Handle (), , AggregateException.
, . TaskCreationOptions Task StartNew (). , TaskFactory FromAsync (), ( Asynchronous Programming Model).
, TaskScheduler. , , .NET Framework. . , .
Parallel
, , , TPL , Thread. , TPL . Parallel, , : .
Parallel , For (), For Each () Invoke (). . , For () for, ForEach () foreach, . Invoke () . , , . .
Invoke ()
Invoke (), Parallel, , . , , . .
public static void Invoke(params Action[] actions)