这是一个非常基本的问题,我想是的,但我找不到任何确定的答案。 SynchronizationContext.Post()
线程安全吗?
我有一个成员变量,它保存主线程的上下文,并且从多个线程调用_context.Post()
。我想可以在对象上同时调用Post()
。我应该做点什么吗
lock (_contextLock) _context.Post(myDelegate, myEventArgs);
还是没必要?
修改
MSDN声明“任何实例成员都不保证是线程安全的。”我应该保留lock()
吗?
答案 0 :(得分:3)
严格遵循MSDN文档,然后不,SynchronizationContext.Post
方法不是线程安全的。因此,除非文档中存在错误,否则您将需要同步对方法的访问。我很难相信它本身并不是线程安全的,但是你不能依赖于假设,特别是在处理线程同步问题时。在Microsoft纠正文档或真正使其成为线程安全之前,确实无法解决这个问题。
答案 1 :(得分:1)
SynchronizationContext.Post
是线程安全的。文档忽略了这一事实。
我将此断言建立在Microsoft的AsyncOperation
和AsyncOperationManager
的实现上,假设SynchronizationContext.Post
是线程安全的(包括任何派生的实现)。