Task.Delay是否在.NET 4中没有记录?

时间:2014-07-09 04:36:05

标签: .net task-parallel-library

我目前正在使用.NET 4和Visual Studio 2010.MSDN表示此版本的.NET框架中没有Task.Delay

但是,在我的系统中,ILdasm显示mscorlib(4.0.0.0)中存在Task.Delay。所以我测试了反射:

typeof (Task).GetMethod("Delay", new []{typeof (int)})
    .Invoke(null, new object[]{1000});

这似乎适用于我的电脑。所以我的问题是:

  1. 这是否意味着Microsoft以某种方式提供了该方法,但它们只是隐藏它?

  2. 使用包装函数以上述方式使用它是否安全?更确切地说,这是否适用于仅安装了.NET 4的其他计算机? (我的系统是Windows 7)

  3. 更新

    我忘了天气或者没有安装.NET 4.5。所以我从控制面板检查。是的,安装了.NET 4.5.1。

2 个答案:

答案 0 :(得分:10)

.NET 4.0中不存在此方法。

你可能是ILspying 4.5。所有.NET 4.x的程序集,在本文发布时通过4.5.2显示v4.0.0.0,更新版本在安装时替换旧版本 - 它们是向后兼容。

当您能够通过反射获取Task.Delay时,因为您的应用实际上是在.NET 4.5上运行。

当您在Visual Studio中选择框架版本时,它将使用您安装的任何版本,但仅显示该选择中的实际方法 - 您可以将其视为兼容性选择,而不是精确的版本选择

我相信NuGet上的Microsoft.BclMicrosoft.Bcl.Async包中的一个包含一个TaskEx.Delay,您可以使用它在旧框架上模拟它并在使用时路由到内置版本较新的。这些包包含反向移植的API。

答案 1 :(得分:0)

如果没有记录,您无法保证它能够始终如一地工作或完全正常工作。但是你已经知道了:)他们保持不公开,因为他们要么没有足够的时间来充分测试/修复它,要么他们在API需要存在时并不确信。无论哪种方式,您应该问的问题是如何使用.NET4中存在的工具实现您自己的API版本