.NETコアのController
ではOk()
をIActionResult
として返すことができます。しかし、私はそれがまたTask<IActionResult>
を返す方法を理解していません。Ok()はどのようにして<IActionResult>タスクとIActionResultの両方になりますか?
例:
public class FooController : Controller
{
[HttpGet]
public async Task<IActionResult> OkResultAsync()
{
// This is ok. But I don't get why since OkResult != Task<IActionResult>
OkResult result = Ok();
return result;
}
[HttpGet]
public IActionResult OkResult()
{
// This is ok, and it seems logical since OkResult implements IActionResult.
OkResult result = Ok();
return result;
}
[HttpGet]
public FooResult Bar()
{
// This is ok.
return new FooResult();
}
[HttpGet]
public async Task<FooResult> BarAsync()
{
// This is not ok since FooResult != Task<FooResult>
return new FooResult();
}
}
Ok()
が順番にIActionResult
を実装OkResult
を返します。メソッドシグネチャがTask<IActionResult>
を返す場合、.NETはそれを処理する方法を(待機せずに)どのように知っていますか?
'async-await'はコンパイラー機能で、非同期実行用のコードを生成します。したがって、メソッドを 'async'としてマークすると、コンパイラは戻り値を' Task ' –
Fabio