标签: ynchronizationontext

传输事件处理程序中的SynchronizationContext.Post(...)

我们有一个方法,由于客户端应用程序中的线程需要使用SynchronizationContext.

我的一位同事编写的代码中有一些代码对我来说没有"感觉",并且性能分析器告诉我退出这段代码中正在使用大量处理.

void transportHelper_SubscriptionMessageReceived(object sender, SubscriptionMessageEventArgs e)
        {
            if (SynchronizationContext.Current != synchronizationContext)
            {
                synchronizationContext.Post(delegate
                     {
                         transportHelper_SubscriptionMessageReceived(sender, e);
                     }, null);

                return;
            }
  [code removed....]
}
Run Code Online (Sandbox Code Playgroud)

这对我来说感觉不对,因为我们基本上将相同的请求发布到gui线程事件队列...但是,除了这个代码区域的性能之外,我也看不出任何明显有问题的问题.

此方法是附加到由我们的中间层消息传递层帮助程序(transportHelper)引发的事件的事件处理程序,它存在于处理来自GUI的请求的服务中.

这似乎是确保我们不会遇到跨线程错误的可接受方式吗?如果没有,是否有更好的解决方案?

谢谢

c# multithreading synchronization ynchronizationontext

2
推荐指数
1
解决办法
2805
查看次数