1.0 ContinueWith
在ContinueWith会得到上个任务的结果并且可以用IsFaulted判断上个任务是否出现异常!
var t = Task.Run(() => { throw new Exception(""); });
//如果有异常
t.ContinueWith(c =>
{
if (c.IsFaulted)
{
Console.WriteLine("发生了异常,但不被系统抛出来了,但是此时获取上个任务的结果会抛出异常");
}
});
Console.ReadKey();
2.0 OnCompleted
//先输出 已经开始执行,其次才是第一句
var t = Task.Run(() => { Thread.Sleep(1500); throw new Exception("");});
t.GetAwaiter().OnCompleted(() => { Console.WriteLine("这里是执行完后自动的回调事件"); });
Console.WriteLine("已经开始执行");
Console.ReadKey();
3.0 t.GetAwaiter().GetResult,t.Wait(),t.Result
var t = Task.Run(() => { Thread.Sleep(1500); });
t.GetAwaiter().GetResult();
Console.WriteLine("上面会阻塞线程获取结果");
Console.ReadKey();
4.0 await,这就不演示了,配合async关键字使用!具体可以我另一篇文章