簡體   English   中英

如何創建異步Web-API控制器操作

[英]How to create async web-api controller action

(根據我在這里的其他問題

我創建了以下異步web-api-controller操作,但它從未返回

public async Task<string> Tester()
{
    Task t = new Task(() => Thread.Sleep(2000));

    await t;

    return "OK";
}

我做錯了什么?

因為任務從未啟動,所以它永遠不會返回,因此掛起。 調用Task.Start方法:

Task t = new Task(() => Thread.Sleep(2000));
t.Start();

或者使用Task.Run代替:

Task t = Task.Run(() => Thread.Sleep(2000));

或者使用Task.Delay而不是非阻塞的(除非僅出於示例目的而使用Thread.Sleep ):

Task t = Task.Delay(2000);

請記住,在Web應用程序中,除受I / O約束的工作以外的所有其他事物都應保持同步。 將與CPU綁定的工作推遲到線程池不會給您帶來任何好處-如果有的話,會損害性能。

請參見Stephen Cleary的Task.Run禮儀示例:在實現中不要使用Task.Run

我在控制台應用程序中嘗試了它,它起作用了!

您只需要做的就是啟動任務t:

static void Main(string[] args)
    {
        string test = Tester().Result;
        Console.WriteLine(test);
    }

    public static async Task<string> Tester()
    {
        Task t = new Task(() => System.Threading.Thread.Sleep(2000));
        t.Start();
        await t;

        return "OK";
    }

暫無
暫無

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

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