Skip to main content
 首页 » 编程设计

c#之如何创建异步 web-api Controller 操作

2024年01月18日31cmt

(基于我的另一个 question here )

我创建了以下异步 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 绑定(bind)工作外都应该是同步的。将 CPU 密集型工作推迟到线程池不会给您带来任何好处 - 如果有的话,它会损害性能。

参见 Stephen Cleary 的 Task.Run Etiquette Examples: Don't Use Task.Run in the Implementation