- 3
- 0
- 约1.19万字
- 约 17页
- 2016-02-24 发布于江苏
- 举报
CLR .NET 4.5 基类库中的新增功能.doc
.NET 4.5 基类库中的新增功能
Immo Landwerth
Microsoft .NET Framework 基类库 (BCL) 中包含的全都是基本类。 虽然有些基本结构很稳定而不会发生多大变化(如 System.Int32 和 System.String),但 Microsoft 还是在这方面投入了很多人力和物力。 本文介绍了 .NET Framework 4.5 中对 BCL 进行的重大改进(以及一些很小的改进)。
在阅读本文时,请记住本文以 .NET Framework 4.5 测试版为基础,而不是以最终产品和 API 为基础,因此,功能可能会有所变化。
如果您希望简要了解 .NET Framework 中的其他方面(如 Windows Communication Foundation (WCF) 或 Windows Presentation Foundation (WPF)),请参阅 MSDN 库页面“.NET Framework 4.5 测试版中的新增功能”(bit.ly/p6We9u)。
简化的异步编程
使用异步 I/O 有很多优点。 这有助于避免阻止 UI,并且可以减少操作系统需要使用的线程数。 然而,您很可能无法利用该功能,因为异步编程过去一直相当复杂。 最大的问题是,以前的异步编程模型 (APM) 是围绕 Begin/End 方法对设计的。 为了说明这种模式的工作原理,请考虑使用下面的简单同步方法来复制流:
public void CopyTo(Stream source, Stream destination)
{
byte[] buffer = new byte[0x1000];
intnumRead;
while((numRead = source.Read(buffer, 0, buffer.Length)) != 0)
{
destination.Write(buffer, 0, numRead);
}
}
要将这种方法变为使用较早 APM 的异步方法,您必须编写图 1 中所示的代码。
图 1 使用旧异步方法复制流
public void CopyToAsyncTheHardWay(Stream source, Stream destination)
{
byte[] buffer = new byte[0x1000];
ActionIAsyncResult readWriteLoop = null;
readWriteLoop = iar =
{
for(bool isRead = (iar == null); ; isRead = !isRead)
{
switch(isRead)
{
casetrue:
iar = source.BeginRead(buffer, 0, buffer.Length,
readResult =
{
if(readResult.CompletedSynchronously) return;
readWriteLoop(readResult);
}, null);
if(!iar.CompletedSynchronously) return;
break;
casefalse:
intnumRead = source.EndRead(iar);
if(numRead == 0)
{
return;
}
iar = destination.BeginWrite(buffer, 0, numRead,
writeResult =
{
if(writeResult.CompletedSynchronously) return;
destination.EndWrite(writeResult);
readWriteLoop(null);
}, null);
if(!iar.CompletedSynchronously) return;
destination.EndWrite(iar);
break;
}
}
};
readWriteLoop(null);
}
显然,异步版本并不像同步方法那样易于理解。 人们很难从样板代码中了解编程意图;在涉及委托时,需要使用该代码以使基本编程语言结构(如循环)能够正常工作。 如果您没有被困难所吓倒,请尝试添加异常处理和取消。
所幸的是,此 BCL 版本提供了基于 Task 和 TaskT 的新异步编程模型。 通过添加 async 和 await 关键字,C# 和 Visual Basic 提供了极佳的语言支持(顺便说一下,F# 已通过异步工作流为其提供语言支持,事实上,此功能的灵感就来源于此)。 因此,编译器现在承担了样板代码的大多数工作(即便不是全部),而过去您必须得自己编写这些代码。 新的语言支持再加上 .NET Frame
您可能关注的文档
最近下载
- 2025年会计职称考试《初级会计实务》内部控制与审计基础理论与模拟试题及答案.docx VIP
- 2022年欧洲新生儿呼吸窘迫综合征管理指南更新要点解读.pptx VIP
- 四川省成都市重点中学高一上学期期末物理试卷.docx VIP
- SY∕T 7018-2014 控压钻井系统.pdf VIP
- 四渡赤水战役中的红军情报工作.doc VIP
- 湘教版(2024)八年级上册地理第二章第二节《中国的气候》教学课件.ppt
- 2024-2025学年江苏省天一中学高一上学期期末数学试题及答案.pdf VIP
- 课题申报书:少先队活动与思政教育一体化建设研究.docx VIP
- 2025年信息系统安全专家单点登录系统中的权限提升漏洞分析专题试卷及解析.pdf VIP
- 2025年信息系统安全专家CA人员管理与安全意识专题试卷及解析.pdf VIP
原创力文档

文档评论(0)