Я использую VB.Net, MVC 5, Visual Studio 2013. У меня есть вопрос here о просмотре кода, в котором было предложено сделать некоторые из моих функций модели просмотра асинхронными. Я пытаюсь реализовать это предложение.VB.Net Async с использованием Await правильно
У меня есть метод в моей точки зрения модели, которая вызывается действием (эта часть, кажется, работает хорошо):
Async Function getItemHistory(itemID As Integer, itemTypeID As Integer) As Threading.Tasks.Task(Of ItemHistoryPresentationModel)
Dim returnModel = New ItemHistoryPresentationModel
Dim getOperatorsTask As Task(Of List(Of String)) = getOperatorsAsync(itemID)
Dim getItemNameTask As Task(Of String) = getItemNameAsync(itemTypeID)
Await Task.WhenAll(getOperatorsTask, getItemNameTask)
returnModel.ItemTypeString = getItemNameTask.Result
returnModel.Operators = getOperatorsTask.Result
Return returnModel
End Function
Проблема Я сталкиваюсь в моей getItemNameAsync
и getOperatorsAsync
:
Async Function getItemNameAsync(itemTypeID As Integer) As Task(Of String)
Dim itemName = (From row In db.tblCategories
Where row.Item_Type_Identifier = itemTypeID
Select row.Item_Type).SingleOrDefault()
Return itemName
End Function
Эта функция дает мне предупреждение:
Этот метод асинхронного испытывает недостаток «ОЖИДАНИЯ 'и так будет работать синхронно. Рассмотрите возможность использования оператора «Ожидание» для ожидания неблокирующих вызовов API или «Await Task.Run (...)» для работы с привязкой к процессору в фоновом потоке.
Я был под впечатлением, что Await
в getItemHistory
будет заботиться об этой проблеме для меня.
Каков правильный способ избавиться от этого предупреждения?
Уместнее начинать с «листьев» (то есть функций доступа к базе данных) и изменять их для использования асинхронных API * first *. Затем пусть 'async' /' await' растет оттуда, пока ваш метод контроллера не будет асинхронным. –