1

以下代码不会针对 Visual Studio 2010 中的 Async CTP 进行编译:

Enumerable.Range(1, 5).Select(async x =>
{
    await TaskEx.Delay(100);
    return 5;
});

编译错误如下:

Test.cs(40,13): error CS1928: 'System.Collections.Generic.IEnumerable<int>' does not contain a definition for 'Select' and the best extension method overload 'System.Linq.Enumerable.Select<TSource,TResult>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TResult>)' has some invalid arguments
Test.cs(40,49): error CS1503: Argument 2: cannot convert from 'lambda expression' to 'System.Func<int,int>'

但是,根据我的阅读,这里应该发生以下情况:

  • IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)应该使用过载。
  • .Range(1, 5)原样IEnumerable<int>TSourceint
  • 使 lambda 异步,采用int并返回 anint应该产生 a Task<int>,这是TResult应该的。

我在这里没有看到语法问题。问题是什么?

请注意,我还不能使用 VS11,因为我的主应用程序需要 Azure 工具。

编辑:这适用msbuild于命令行,但不适用于 VS2010。即使我的目标是 .NET 4.0,在命令行似乎也使用了 VS11 编译器,而 VS2010 使用它自己的进程内编译器。有谁知道如何换掉 VS2010 使用的编译器?

4

1 回答 1

2

在我的 LINQPad 中工作(机器上安装了 VS11 Beta)

在此处输入图像描述

于 2012-05-23T03:02:39.537 回答