Это должно было быть исправлено в .Net 4.0, но Task.Run () новичок в .Net 4.5
blockquote>.NET 4.5 имеет свою собственную неоднозначность перегрузки, добавляя
Task.Run(Func<Task<T>>)
. И поддержка async / await в C # версии 5. Что позволяет неявное преобразование изT foo()
вFunc<Task<T>>
.Это синтаксический сахар, который довольно сладок для async / await, но создает полости здесь. Отсутствие ключевого слова
async
в объявлении метода - это not , рассмотренное в методе перегрузки метода, которое открывает еще одну коробку pandora неудачников, когда программисты забывают использовать async , когда они предназначены для. В противном случае следует обычное соглашение C #, что для выбора метода перегрузки рассматривается только имя метода и аргументы в методе.Для разрешения неоднозначности требуется явно использовать тип делегата.
zipCodes
- это труба string[]
, а async
принимает только значение Observable
или Promise
в качестве входа. Отсюда и ошибка.
Избавьтесь от трубы async
из шаблона.
Примерно так:
<form>
<mat-form-field>
<input type="text" placeholder="ZipCode" aria-label="ZipCode"
matInput [formControl]="zipCodeControl" [matAutocomplete]="auto">
<mat-autocomplete #auto="matAutocomplete">
<mat-option *ngFor="let zipCode of zipCodes"
[value]="zipCode">
{{zipCode}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>