В C # асинхронная лямбда может быть выражена с типом делегата или с помощью оператора вызова () , за которым следует маркер => как лямбдаоператор для вызова анонимного метода:
Task.Run(async ()=> { } );
Task.Run(async delegate { } );
VB.Net использование анонимного метода может быть вызвано с помощью лямбда-выражения с использованием Sub () или Function (), как встроенных, так и многострочных:
Task.Run(Async Sub() [operation on captured variables])
Task.Run(Sub()
[operation on captured variables]
End Sub))
Task.Run(Async Function() [operation on captured variables])
Task.Run(Function()
Return [operation on captured variables]
End Function))
VB.Net LINQ to SQL не позволяет ожидать в предложении Select, поскольку:
Ожидание может использоваться только в выражении запроса в пределахпервое выражение коллекции исходного предложения From или в выражении коллекции предложения Join
На него есть ссылки в Async / Await FAQ Стивена Туба .
Select Task.Run(Async Function() ... )
пытается вернуть IEnumerble(Of TResult)
вместо IEnumerble(Of Task)
.
Подробнее в Интегрированный в язык запрос (LINQ) (Visual Basic) .
И наоборот, LINQ to Objects - работа с IEnumerable/IEnumerable<T>
коллекциями без других промежуточных провайдеров - разрешает использование асинхронного / ожидающего паттерна для метода Select
:
<Extension>
Public Function ForEachAsync(Of T)(source As IEnumerable(Of T), dop As Integer, body As Func(Of T, Task)) As Task
Return Task.WhenAll(
Partitioner.Create(source).GetPartitions(dop).
Select(Function(p) (
Task.Run(Async Function()
Using p
While p.MoveNext()
Await body(p.Current)
End While
End Using
End Function))))
End Function
Версия LINQ to SQL на C # позволяет вместо этого.
Почему, поскольку это же правило должно также применяться к реализации C #?
Расследование .......
Языковая стратегия .NET :
C # :
Мы будем продолжать расширять C #, чтобы удовлетворять растущие потребности разработчиков и оставаться в состояниихудожественный язык программирования.Мы будем активно вводить новшества, при этом стараясь быть в рамках духа языка.
VB.Net :
Мы будем сохранятьсосредоточиться на опыте работы с разными языками, признавая, что многие разработчики VB также используют C #.Мы сосредоточим инновации на основных сценариях и областях, где VB популярен.
Таким образом, VB и C # Coevolution , заявленные в 2010 году, сместились: C#
и VB.Net
обновление функций было отделено.Следовательно, учитывая новую языковую стратегию, VB.Net
и C#
не показывают примерно одинаковое принятие .