[英]How to create async web-api controller action
因為任務從未啟動,所以它永遠不會返回,因此掛起。 調用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.