SynchronizationContext

SynchronizationContext

本文介绍了如何获取使用SynchronizationContext的任务?以及如何的SynchronizationContext还是使用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我仍然在学习整个任务概念和TPL。从我目前的理解,SynchronizationContext的功能(如present)是由用于等待来调度任务的地方。在另一方面,在工作类的功能不使用的背景下,对吧?

因此​​,例如 Task.Run(...)将总调度线程池的工作线程的行动,并忽略的SynchronizationContext .Current 完全。 Foobar的等待()将使用上下文中的后执行生成的任务的await

如果这是真的,我的问题是:我如何获得工作,实际运行操作,但使用时分派 SynchronizationContext.Current 。发送/发表

和任何人都可以推荐一个好引入的SynchronizationContext ,尤其是当以及他们如何被框架的其他部分所用?该似乎很沉默的类。前谷歌命中(<一个href=\"http://www.$c$cproject.com/Articles/14265/The-NET-Framework-s-New-SynchronizationContext-Cla\">here和<一个href=\"http://www.$c$cproject.com/Articles/31971/Understanding-SynchronizationContext-Part-I\">here)似乎是针对Windows窗体仅调度。斯蒂芬·克利里写道:这是很好的学习什么情况下已经存在,它们是如何工作的,但我缺乏的地方,当他们实际使用和理解。

解决方案

Use special task scheduler:

Task.Factory.StartNew(
    () => {}, // this will use current synchronization context
    CancellationToken.None, 
    TaskCreationOptions.None, 
    TaskScheduler.FromCurrentSynchronizationContext());

Look at the article It's All About the SynchronizationContext by Stephen Cleary.

这篇关于如何获取使用SynchronizationContext的任务?以及如何的SynchronizationContext还是使用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-27 17:58