如何同步任务间共享数据的访问?

How to synchronize access of shared data between tasks?

我正在使用 .net 核心和任务进行一些并行工作,基本上就像两个生产者和一个消费者,两个任务将写入数据,消费者将读取它,在传统的 .net 代码中,这些都完成了通过线程,我可以使用 SemaphoreMutexEventHandle 进行线程之间的同步,但是对于新的基于任务的代码,我读到我不能再使用这些,因为没有保证一个async函数在await之后会在同一个线程上恢复,那么我应该如何在不同的任务之间进行同步呢?

how should I sync between different tasks?

因为你有一个 producer/consumer 系统,你可以使用 BufferBlock<T>,它作为一个异步兼容的 producer/consumer 队列。

在更一般意义上的协调基元替换,请参阅 my AsyncEx.Coordination library. Or you can build your own。 .NET 中唯一内置的是 SemaphoreSlim.