async会和当前线程的SychronizeContext关联,在Web和UI上面的表现某些情况会和Console的不一致。(例如一个async任务的Task上调用.Wait(),Web和UI会死锁而Console不会) 而Task.Run无论在哪里都是默认使用ThreadPool的SynchronizeContext,在Web和UI和Console上的表现一致。 所以不能说async完全替代了Task,Task是作为TPL(Task Parallel Library,并行任务库)的一员,具有比async/await关键字更高的可控性。
提问者评价
现在才发现这两个其实并不冲突。在把一个普通方法包装成一个异步方法的时候,这两个东西需要一起使用