外贸先做网站还是开公司,宁波做网站gs,玩具网站设计,娱乐网站制作//任务的Wait方法;
//模拟一个执行时间为5S的Task任务#xff0c;因为任务是异步的#xff0c;所以不阻塞主线程
Task t_delay Task.Delay(5000);
Task.WaitAll(new Task[] { t_delay }); //任务对象的Wait()方法,等待当前任务结束后继续往下执行
Task t_delay001 Task…//任务的Wait方法;
//模拟一个执行时间为5S的Task任务因为任务是异步的所以不阻塞主线程
Task t_delay Task.Delay(5000);
Task.WaitAll(new Task[] { t_delay }); //任务对象的Wait()方法,等待当前任务结束后继续往下执行
Task t_delay001 Task.Delay(1000);
t_delay001.Wait(); //任务对象的Wait(int millisecondsTimeout)方法在指定的时间内判断任务是否执行完毕返回一个布尔值.
//Wait(int millisecondsTimeout)方法仅仅判断任务是否完成并不会对任务进行任何操作比如cancel等.3000毫秒检测未完成第二次检测就是完成状态了(3000*2 5000)
Task t_delay2 Task.Delay(1000);
if (t_delay2.Wait(2000))
{ bool isok t_delay2.IsCompleted;//true MessageBox.Show(任务完成);
}
else
{ bool isok t_delay2.IsCompleted;//false MessageBox.Show(任务未完成);
} //任务对象的Wait(TimeSpan timeout)方法同样是判断任务在指定的时间内是否已完成之不过参数从毫秒换成了TimeSpan
Task t_delay3 Task.Delay(3000);
string CompletedString t_delay3.Wait(TimeSpan.FromMilliseconds(2000)) ? Completed : Not Completed;
Task t_delay Task.Delay(3000);//创建一个取消标记对象
CancellationTokenSource cts new CancellationTokenSource();
CancellationToken myToken cts.Token;//5000毫秒后取消任务
int timeout 5000;
//cts.CancelAfter(TimeSpan.FromMilliseconds(5000));
cts.CancelAfter(timeout);//cts.Cancel(); 立即取消try
{//等待任务完成并检测取消标记是否被CTS Cancel.t_delay.Wait(myToken);MessageBox.Show(任务完成);
}
catch (OperationCanceledException ex)
{MessageBox.Show(ex.Message \r\n timeout 毫秒内任务未完成);
}
这段代码使用了Task.Delay方法模拟一个耗时操作并使用CancellationTokenSource和CancellationToken来实现任务的取消功能。
首先我们创建了一个CancellationTokenSource对象cts用于取消任务。
然后通过cts.Token获取一个CancellationToken对象token用于在等待任务完成时检测取消标记。
我们创建了一个异步任务task利用Task.Delay方法模拟一个耗时操作持续3秒钟。通过传递token作为参数以便在取消标记被触发时中止任务。
在控制台输出任务开始执行。
使用cts.CancelAfter(5000)方法在5秒钟后取消任务。
在try块中我们调用task.Wait(token)方法来等待任务完成并检测取消标记。如果任务成功完成控制台输出任务执行完毕。
如果任务被取消即取消标记被触发OperationCanceledException异常会被捕获控制台输出任务取消。
这段代码展示了如何使用CancellationToken来取消异步任务以及如何在任务被取消时处理相应的逻辑。通过在task.Wait(token)中传递取消标记我们可以实现任务的取消操作并在需要时做出相应的处理.
任务的延续ContinueWith方法:
//模拟一个执行时间为5S的Task任务因为任务是异步的所以不阻塞Form1_load线程 Task t_delay Task.Delay(5000); //t_delay任务执行完毕后执行ContinueWith的Func方法FuncTask,bool,对应的任务的类型应该是Taskbool Taskbool t_continue t_delay.ContinueWith(t {Thread.Sleep(5000);return t.IsCompleted; }); //获取t_continue任务结果,等t_delay任务执行结束后才会执行t_continue任务所以获取结果会组赛线程约10s bool result t_continue.Result;