Хорошо ли использовать асинхронные вызовы API? - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу знать, выполняет ли приведенный ниже код следующий оператор во время ожидания асинхронного вызова API?Если это так, то значение будет нулевым и может вызвать нулевое исключение?Я делаю это правильно?

var response = await pl_httpClient.GetAsync("api/GetInfo?CardNo=" + CardNo);

if (!response.IsSuccessStatusCode) 
{ 
return response.StatusCode); 
}

InfoModel infoModel = await response.Content.ReadAsAsync<InfoModel>();

if(infoModel == null){ return "Card number is invalid"; }

if (infoModel.ExpiryDate < DateTime.Now.Date) { return "Expired Card Number"; }

if (!infoModel.MemberStatus.Equals("1")) { return "Inactive Card Number"; }

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Способ Мне нравится думать об этом в том, что await приостанавливает метод, но не поток. Так для кода, подобного этому:

var response = await pl_httpClient.GetAsync("api/GetInfo?CardNo=" + CardNo);
if (!response.IsSuccessStatusCode) 

Весь метод приостанавливается в операторе await до завершения загрузки. Затем метод возобновляет выполнение, устанавливает переменную response и затем проверяет response.IsSuccessStatusCode.

1 голос
/ 04 апреля 2019

Я предлагаю вам прочитать это: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/

Но, отвечая на ваш вопрос, ключевое слово await сообщает вашему асинхронному методу, что он может выполнить все, что захочет, и будет ждать результата.Просто как тот.С другой стороны, если вам не нужна информация infoModel для выполнения следующих строк кода, вы можете просто удалить ключевое слово await.

Например:

Task<InfoModel> infoModelTask = await response.Content.ReadAsAsync<InfoModel>();
// Execute database operations, I/O etc...
InfoModel infoModel = await infoModelTask;
if (infoModel == null)
{
    return "Card number is invalid";
}
...