如何同步任务间共享数据的访问?
How to synchronize access of shared data between tasks?
我正在使用 .net 核心和任务进行一些并行工作,基本上就像两个生产者和一个消费者,两个任务将写入数据,消费者将读取它,在传统的 .net 代码中,这些都完成了通过线程,我可以使用 Semaphore
或 Mutex
或 EventHandle
进行线程之间的同步,但是对于新的基于任务的代码,我读到我不能再使用这些,因为没有保证一个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
.
我正在使用 .net 核心和任务进行一些并行工作,基本上就像两个生产者和一个消费者,两个任务将写入数据,消费者将读取它,在传统的 .net 代码中,这些都完成了通过线程,我可以使用 Semaphore
或 Mutex
或 EventHandle
进行线程之间的同步,但是对于新的基于任务的代码,我读到我不能再使用这些,因为没有保证一个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
.