Ela*_*atz 1 c# asp.net-mvc async-await asp.net-web-api
我创建了以下异步web-api-controller操作,但它永远不会返回
public async Task<string> Tester()
{
Task t = new Task(() => Thread.Sleep(2000));
await t;
return "OK";
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
它永远不会返回,因为任务从未启动过,因此它会挂起.调用Task.Start
方法:
Task t = new Task(() => Thread.Sleep(2000));
t.Start();
Run Code Online (Sandbox Code Playgroud)
或者Task.Run
改为使用:
Task t = Task.Run(() => Thread.Sleep(2000));
Run Code Online (Sandbox Code Playgroud)
或者使用Task.Delay
非阻塞(除非您Thread.Sleep
仅仅为了示例而使用):
Task t = Task.Delay(2000);
Run Code Online (Sandbox Code Playgroud)
请记住,在Web应用程序中,除I/O绑定工作之外的所有内容都应该是同步的.将CPU限制工作推迟到线程池不会给你带来任何东西 - 如果有的话,它会损害性能.
请参阅Stephen Cleary的Task.Run Etiquette示例:不要在实现中使用Task.Run
归档时间: |
|
查看次数: |
1509 次 |
最近记录: |