Барлық демонстрациялар

async/await state machine-ге қалай айналады

Компилятор async әдісін қалай өзгертетінін көріңіз: MoveNext шақырулары, await кезіндегі тоқтау, continuation жоспарлау және Task аяқталуы.

Ағымдағы кезең Дайын
Қадам0 / 7
State
Қайтарылған Taskжасалмаған
Орындаушы ағыншақырушы ағын
Сақталған awaiterжоқ

Бастапқы async әдіс

Әзірлеуші жазатын код.

async Task<string> LoadProfileAsync()
{
    Log("start");
    var user = await GetUserAsync();
    var score = await GetScoreAsync(user);
    return $"{user}: {score}";
}

Компилятор жасаған state machine

Құрылым тоқтаулар арасында сақталып, жергілікті айнымалыларды өрістерде ұстайды.

var machine = new <LoadProfileAsync>d__0();
machine.MoveNext();
state = 0; builder.AwaitUnsafeOnCompleted(...);
awaiter.GetResult(); state = -1;
state = 1; builder.AwaitUnsafeOnCompleted(...);
state = -2; builder.SetResult(result);

Runtime орындалуы

I/O күтілгенде ағын босайды, ал орындалу күйін state machine сақтайды.

1Шақырушы код
2MoveNext()
3Пайдаланушы I/O
4Continuation кезегі
5Рейтинг I/O
6SetResult()

Әдіс әлі шақырылған жоқ: state machine және Task жоқ.