- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
Microsoft.Bcl.Async
使开发人员能够在没有 .NET Framework 4.5 的情况下使用 async/await
关键字,他们应该以使用它们为目标。
太好了,这要感谢 Microsoft CLR 和语言团队的人们的辛勤工作。
现在我很好奇这是如何工作的。
async/await
要求编译器做一些繁重的工作,将代码转换成可以执行 await 操作的东西。
编译器最初会在 .NET Framework 4.0 下抛出编译错误,即使它清楚地知道 async/await
的含义(Visual Studio 2012/2013。)
那么这个库如何告诉编译器不要抛出与异步操作相关的特定编译错误,并像在 .NET Framework 4.5 下一样进行一些代码提升?
最佳答案
async/await
只不过是 C# 5.0 编译器转换。 IL
级别没有async/await
。
一个简单的例子是 using() { }
语句,它也是一个编译器转换。它只是将 using
语句转换为 try/finally
block 。但是,依赖于 .NET 1.1 中定义的 IDisposable
接口(interface)。
同样,async/await
转换依赖于某些类型,例如 .NET 4.5 中定义的 IAsyncStateMachine
接口(interface)。 Microsoft.Bcl.Async
将这些类型定义获取到 .NET 4.0。
编辑
How does the Microsoft.Bcl.Async assembly cause the compiler to recognize a new keyword (async/await)?
不,它没有。 C# 5.0 编译器已经知道关键字以及如何处理它们。但是,它找不到所需的类型,因为项目是针对 .NET 4.0 的。 Microsoft.Bcl.Async
包引入了这些类型。
关于c# - Microsoft.Bcl.Async 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22060691/
.NET 基类库中是否有完整构建器模式的示例?我正在寻找具有实际导演和多个具体 build 者的东西。 最佳答案 我远非这方面的专家,但我认为 DbCommandBuilder及其继承类( OdbcC
在 F# 中,您可以定义一个 first功能如下: let first (x, y) = x 你可以这样称呼它: first (1, 2) 您还可以根据 BCL Tuple 定义相同的函数类型: le
4.5 霍夫曼压缩 Syntax: outsize = Huffman_Compress(in,out,insize) outsize Size of output buffer after comp
如果我有一个类,例如 T1,我想知道它正在使用 BCL 中的哪些类,我该怎么做? 我想到了这个: T1.GetType().GetMethods().Where(x => x.DeclaringTy
在过去,我们可以使用大括号方便地初始化可变集合,如下例所示: var myDictionary = new Dictionary {{"hello", 0m}, {"world", 1m}}; 是否有
代码契约工作得很好,直到你必须为来自框架代码的结果添加无数的Contract.Assume(...)。例如,MemoryStream.ToArray() 从不返回 null 数组,正如我在 Refle
我使用 Microsoft.Bcl.Async package在一个项目中,并且该项目被另一个不使用异步功能的项目引用。 现在我在编译解决方案(或仅编译第二个项目)时收到此错误警告: The prim
好像是 System.Diagnostics.Debug , 和 System.Diagnostics.Trace 大致相同,但值得注意的异常(exception)是 Debug 用法是在发布配置中编
以下是 FSI 中的内容: > System.Math.Round(0.2916, 2);; val it : float = 0.29 > it * 100.;; val it : float =
一些 .net 理论问题:哪些库实际上是标准化的?我知道有一个通用类型系统,它指定了诸如 32 位整数和所有这些低级信息之类的东西,但我对通用语言规范和基类库的状态/关系感到困惑。 系统中有一些基本类
我需要清楚地了解类库。 Base Class Libraries 和 Framework Class Libraries 都属于命名空间——我的意思是我们可以称它们都是命名空间吗?如果不是,我们可以将
比如 Point、Size 等值类型。 我还听说 .NET 中的字符串并非真正不可变。 F# 是否使用这些或它们的替代不可变版本? 如果它使用标准的可变 BCL 类型,这不会损害 F# 在编译和运行时
有什么方法可以知道 .NET 预定义方法的确切时间复杂度。就像我想知道 的复杂性一样 String.Contains() 或 Hashtable.ContainsKey() Microsoft 是否
Microsoft.Bcl.Async 使开发人员能够在没有 .NET Framework 4.5 的情况下使用 async/await 关键字,他们应该以使用它们为目标。 太好了,这要感谢 Micr
我清楚地记得 C# 的 SSE 增强向量的发布,我知道我们不久前才对它们进行了一些测试。现在,它们似乎从互联网上消失了。 2014 年的 NuGet 包仍然存在,但已除名: The owner has
什么是 Microsoft.Bcl.Async 及其用途? 我读过the package page那: This package enables Visual Studio 2012 projects
为什么 BCL 中没有 AutoResetEventSlim 类? 可以用ManualResetEventSlim模拟吗? 最佳答案 ManualResetEvent 和 ManualResetEve
为什么 .NET 基类库没有 CPR 类? 最佳答案 Eric Lippert 对“为什么未实现功能 X”有最好的解释(我认为他知道一两件关于为什么或为什么没有用语言实现的事情) I am asked
BCL 和 CLR(以后只使用 CLR)中的所有 .NET 程序集都是 strongly named and digitally signed .提供数字证书是为了确保程序集未被篡改或更换的信任度。但
我想调试 [MethodImpl(MethodImplOptions.InternalCall)] BCL 方法的实现,该方法可能是用 C++ 实现的。 (在本例中,我正在查看 System.Stri
我是一名优秀的程序员,十分优秀!