SynchronizationContext:提供在各种同步模型中传播同步上下文的基本功能
就是对当前线程上下文的封装,或者叫当前线程所在环境的封装。封装的对象可以传递至其他线程,然后在其他线程中调用其post或send方法,以此来实现线程间的消息传播。
我们知道,异步方法在遇到await之前都在当前线程中执行,当执行完await这行后,方法就会退出,然后会将await之后的代码封装成委托
另外,Task对象有一个ConfigureAwait方法,用来配置是否同步上下文。尝试将延续任务封送回原始上下文件,默认为true,即异步前(await)所在的线程的同步上下文。
如果不想接下来的代码逻辑在原来上下文中执行,可以将continueOnCapturedContext设为false,这也是微软推荐的做法,不然会出现死锁等情况。
总结:用到异步的地方都加上ConfigureAwait(false),另一个不要使用wait方法,用异步就用到底。