Task.FromResult代替Task.Run
对于一些预先知道的结果或者只是一个简单的计算函数,使用Task,FromResult要比Task.Run性能要好,因为Task.FromResult只是创建了一个包装已计算任务的任务...线程池内线程增加会导致在执行时大量的进行上下文切换,从而浪费程序的整体性能, 线程池详细信息请参考CLR第27章
?...使用Task.Result和Task.Wait()会在winform和ASP.NET中会死锁,因为它们SynchronizationContext具有对象,两个线程在SynchronizationContext...争夺导致死锁,而ASP.NET Core则不会产生死锁,因为ASP.NET Core本质是一个控制台应用程序,并没有上下文
❌下面的例子,虽然都不会产生死锁,但是依然具有很多问题
async Task<...代码更容易修改(例如:增加一个using)
异步的方法诊断起来更加容易(例如:调试,挂起)
抛出的异常将自动包装在返回的任务之中,而不是抛出实际异常
❌下面这个错误的例子是将Task直接返回给了调用者