2016-02-09 3 views
-1

У меня есть один вопрос о ключевое слово await. Вот некоторый тестовый код:Асинхронные вызовы с ожиданием

string username = await GetUsernameAsync(); 
// Some other code 
var some_variable = username; 

Мой вопрос: Есть ли ждем начинаются в первой строке, где мы назвали метод асинхронного или на третьей строке, в которой мы нуждаемся результат метода асинхронного? Выполняется ли какой-либо другой код после того, как GetUsernameAsync завершит его выполнение, или они выполняются параллельно?

+2

ожидание будет на первой линии – Seb

+0

Это можно легко проверить. Но в основном выполнение этих утверждений останавливает (ждет) ключевое слово 'await', что подразумевается самим ключевым словом. – David

ответ

3

Это происходит на линии, где находится await.

Если вы хотите отложить ожидание, переместите await в тот момент, когда вам нужен результат. Помните задачу и двигайтесь дальше. Затем, если вам нужен результат, ожидайте выполнения задачи:

Task<string> usernameTask = GetUsernameAsync(); 
// Some other code 
var some_variable = await usernameTask; 
1

Первый. Учесть, что ожидание - это просто синтаксис сахара. Он будет более или менее заменен Task.Wait(), чтобы получить результат. Фактически, GetUsernameAsync() вернет задачу, а не строку.

Посмотрите это link к глубокому более, как потоки работают с ASYN/ждут картины

Смежные вопросы