异步任务处理全解析
1. 使用 await 获取任务结果
在异步编程中,我们可以使用 await 关键字来获取任务的结果,示例代码如下:
string pageContent = await webGetTask;
这看起来似乎和直接使用 webGetTask.Result 没有太大区别,但实际上,C# 编译器会将这个语句重构为一个回调驱动的状态机,这样可以在不阻塞调用线程的情况下获取结果。如果操作还未完成,线程会返回给调用者,方法的其余部分会在操作完成后继续执行。
不过,代码如何知道任务何时完成呢? Result 或 Wait 方法会阻塞线程,这违背了使用异步 API 的初衷。通常,我们希望在任务完成时得到通知,这时可以使用延续任务(Continuations)。
2. 延续任务
任务提供了 ContinueWith 方法的多种重载。这个方法会创建一个新的基于线程的任务,当调用 ContinueWith 的任务完成时(无论成功、失败还是取消),新任务就会执行。以下是一个延续任务的示例:
webGetTask.ContinueWith(static t =>
{
string webContent = t.Result;
Console.WriteLine
超级会员免费看
订阅专栏 解锁全文
1191

被折叠的 条评论
为什么被折叠?



