簡體   English   中英

Ok()如何兼具任務 <IActionResult> 和IActionResult?

[英]How can Ok() be both Task<IActionResult> and IActionResult?

在.NET Core中的Controller中,您可以將Ok()作為IActionResult 但是我不明白它怎么也可以返回Task<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()返回一個OkResult ,后者進而實現IActionResult 如果方法簽名返回Task<IActionResult> ,.NET如何知道如何處理(不等待)?

async關鍵字使編譯器自動執行此操作。 異步方法隱式“包裝”任務中的返回值。

async Task<int> GetNumber()
{
    return 42;
}

Task<int> GetNumber()
{
    return Task.FromResult(42);
}

async關鍵字是將方法的內容包裝在Task中的簡寫形式。 當您在異步方法內部返回時,編譯器會為您包裝成一個Task。 例如,這兩種方法本質上是相同的:

private static Task<string> Hello()
{
    return new Task<string>(() => "hello");
} 

private static async Task<string> AsyncHello()
{
    return "hello";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM