C# 如何创建一个一次只能从一个线程执行的异步方法?
我有一个IO.Stream,我需要写入它,然后从中读取。由于响应直接绑定到发送的数据,因此我需要防止此方法并行执行,以便保证其完整性。现在,我也希望这个方法是可以期待的,这是可能的吗?我将流包装成一个同步的蒸汽,这将防止读写过程中的干扰,但不能保证保持正确的读写操作顺序。我对如何实现这一点有些迷茫,因为如果我想使用异步等待方法,我就不能锁定流 您可以使用C# 如何创建一个一次只能从一个线程执行的异步方法?,c#,multithreading,asynchronous,locking,C#,Multithreading,Asynchronous,Locking,我有一个IO.Stream,我需要写入它,然后从中读取。由于响应直接绑定到发送的数据,因此我需要防止此方法并行执行,以便保证其完整性。现在,我也希望这个方法是可以期待的,这是可能的吗?我将流包装成一个同步的蒸汽,这将防止读写过程中的干扰,但不能保证保持正确的读写操作顺序。我对如何实现这一点有些迷茫,因为如果我想使用异步等待方法,我就不能锁定流 您可以使用信号量lim.WaitAsync static SemaphoreSlim semaphoreSlim = new SemaphoreS
信号量lim.WaitAsync
static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1,1);
//Asynchronously wait to enter the Semaphore. If no-one has been granted access to the Semaphore, code execution will proceed, otherwise this thread waits here until the semaphore is released
await semaphoreSlim.WaitAsync();
try
{
await Task.Delay(1000);
}
finally
{
semaphoreSlim.Release();
}
谢谢你的回答,我找到了一个不同的解决方案。我正在将send命令排入队列,并将它们与在单独线程中读取的响应进行匹配。因为写入和读取是串行的,所以它们可以按顺序安全地匹配。TPL数据流听起来可能适合您参考:您不应该担心哪些线程同时调用相同的方法:您应该担心哪些线程访问相同的数据。可能有不同的线程执行不同的方法,但仍然存在问题,因为两种方法访问相同的数据。其他时候,您可以在同一时间在同一方法中有不同的线程,但不会有问题,因为它们使用该方法操作不同的数据。