SynchronizationContext笔记

Posted 程序员日志

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SynchronizationContext笔记相关的知识,希望对你有一定的参考价值。

  SynchronizationContext 类是一个基类,可提供不带同步的自由线程上下文。 此类实现的同步模型的目的是使公共语言运行库内部的异步/同步操作能够针对不同的异步模型采取正确的行为。此模型还简化了托管应用程序为在不同的同步环境下正常工作而必须遵循的一些要求。同步模型的提供程序可以扩展此类并为这些方法提供自己的实现。
  简而言之就是允许一个线程和另外一个线程进行通讯,SynchronizationContext在通讯中充当传输者的角色。另外这里有个地方需要清楚的,不是每个线程都附加SynchronizationContext这个对象,只有UI线程是一直拥有的。

Current 获取当前同步上下文

var context = SynchronizationContext.Current;

 

Send 一个同步消息调度到一个同步上下文。

SendOrPostCallback callback = o =>
                                              {
                                                  //TODO:
                                              };
context.Send(callback,null);

send调用后会阻塞直到调用完成。

 

Post 将异步消息调度到一个同步上下文。

SendOrPostCallback callback = o =>
                                              {
                                                  //TODO:
                                              };
context.Post(callback,null);

和send的调用方法一样,不过Post会启动一个线程来调用,不会阻塞当前线程。

以上是关于SynchronizationContext笔记的主要内容,如果未能解决你的问题,请参考以下文章

SynchronizationContext.CreateCopy 的目的

从给定线程获取 SynchronizationContext

为啥控制台应用程序中没有捕获默认的 SynchronizationContext?

寻找自定义 SynchronizationContext 的示例(单元测试所需)

SynchronizationContext是什么?

SynchronizationContext.Current 在不同的应用程序域上运行时为空