Tag: conceptual

SynchronizationContext.Send和SynchronizationContext.Post有什么区别?

感谢Jeremy Miller在日常.NET开发的function编程方面所做的出色工作,我有一个工作的命令执行器,可以完成我想要的所有工作(对线程池进行繁重的工作,将结果或错误发送回同步环境,甚至发布回到同步上下文),但我无法解释为什么它使用来自线程池的SynchronizationContext.Send和来自Func Synchronization.Post传递给执行繁重工作的方法。 我已经多次阅读过这些文档,但是我无法直截了当地了解它的区别。 我应该从一个名为Send的事实中得到什么,一个叫做Post ? 我感觉神奇的是Send “启动同步请求”和Post “启动异步请求”,但这两个请求都来自线程池,需要发送/发回到UI线程。 有人可以解释这个区别,即使它只是一个助记符设备让我知道何时选择一个而不是另一个? 如果重要,这是我的测试代码 ,我使用Post将进度发送回UI: private Action _ExecuteCommand (SynchronizationContext context , Action progress , Action after) { int count = 3; int accumulatedValue = 0; int threadId = Thread.CurrentThread.ManagedThreadId; for (int i = 0; i after(threadId, accumulatedValue); } _ExecuteCommand方法作为下面的command参数传入,主要来自原始文章,它使用Send将完成和错误消息发送回UI: public void Execute(Func command, Action error) { ThreadPool.QueueUserWorkItem(o => […]

async和await关键字不会导致创建其他线程吗?

我糊涂了。 一个或多个Task如何在一个线程上并行运行? 我对并行性的理解显然是错误的。 MSDN的比特我无法理解: async和await关键字不会导致创建其他线程。 异步方法不需要multithreading,因为异步方法不能在自己的线程上运行。 该方法在当前同步上下文上运行,并且仅在方法处于活动状态时才在线程上使用时间。 ..和: 在启动任务和等待任务之间,您可以启动其他任务。 其他任务隐式并行运行,但不会创建其他线程。