Вопрос по c#, async-await – Проекция с использованием асинхронного делегата / лямбда

1

Следующий код не будет компилироваться с Async CTP в Visual Studio 2010:

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>'

Однако, по моим прочтениям, здесь должно произойти следующее:

The overload IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector) should be used. As the .Range(1, 5) is IEnumerable<int>, TSource is int Making the lambda async, taking an int and returning an int should produce a Task<int>, which is what TResult should be.

I don't see a syntax issue here. What is the problem?

Обратите внимание, что я пока не могу использовать VS11, потому что для моего основного приложения требуются инструменты Azure.

EDIT: Это прекрасно работает сmsbuild в командной строке, но не в VS2010. Кажется, что в командной строке компилятор VS11 используется, хотя я нацеливаюсь на .NET 4.0, тогда как VS2010 использует свой собственный внутрипроцессный компилятор. Кто-нибудь знает, как поменять компилятор, который использует VS2010?

вне изменения TaskEx на Task, отлично работает в моих LINQPad и VS11, так что похоже на ошибку CTP? James Manning
Впрочем, вы можете обойти это в CTP, выполнив что-то вроде & quot; Func & lt; int, Task & lt; int & gt; & gt; foo = async x = & gt; .. & APOS; а затем передать это в Select? James Manning
@JamesManning. К сожалению, пример придуман (хотя он определенно не будет компилироваться в CTP), и в действительности задействованы анонимные типы. Итак, мне нужно полагаться на компилятор, чтобы получить правильные типы. David Pfeffer
@JamesManning Можете ли вы на самом деле развернуть в облаке, используя VS11 с NuGet, выполнив Publish? David Pfeffer
не уверен, что понимаю ограничения Azure? Я установил Azure SDK через Nuget в моих бета-проектов VS11 хорошо - я неправильно понимаю? James Manning

Ваш Ответ

0   ответов

Похожие вопросы