2017-12-07 20 views
-1

awaitは非同期の非voidタスクのタイプを返すのに対し、awaitの返送はタスク自体を返す理由についての明確化を求めています。タイトルやその他の用語が間違っている場合は、私に知らせてください。即時待ちの返り値対延期待ちの待ち時間

private async Task<string> GetUserId(Guid id) 
{ 
    string thisUserId = null; 
    ... do stuff ... 
    return thisUserId; 
} 

public async Task<IActionResult> MyFunc(Guid id) 
{ 
    var a = await GetUserId(id); 
    var b = GetUserId(id); 
    ... do stuff ... 
    await b; 

    return Ok(true); 
} 

なぜbはタイプTask<string>でありながらタイプstringaのですか?

+2

タイプ「タスク」の式を待っている結果は、常に「T」です。 1つのケースでは、メソッドを1つのステートメントで待機し、別のステートメントで2つの別々のステートメントで待機させたメソッドを組み合わせました。 –

答えて

2

いずれの場合も、メソッドは常にTask<string>のオブジェクトを返します。ただし、awaitを実行すると、その結果はTaskという文字列の結果になります。

したがって、最初にメソッドを呼び出すときにこれを行うと、すぐにTaskを処理しています。しかし、2回目の呼び出しでは、あなたが「ものをやる」まで、Taskを処理しません。その場合、変数はまだ文字列を返すTaskです。最後にawaitと呼ぶと、そのタスクの結果が得られます。

+2

完全に意味があります、ありがとうございます。 – 8protons

関連する問題