我有一个使用资源的WPF应用程序。该资源可以以两种方式使用:
当阅读正在进行且用户必须写作时,我遇到了问题。我想堆栈对资源方法的调用,以便顺序执行它们。
这些是资源的方法:
async Task <bit []> ReadBitsAsync (byte id)
async Task <ushort []> ReadUshortsAsync (byte id)
async Task WriteBitAsync (byte id, ushort position, bool value)
async Task WriteUshortAsync (byte id, ushort position, ushort value)
我尝试使用lock
语句执行此操作,但您无法在await
语句中task
lock
。
有没有办法用所有参数值堆叠这些方法调用?
答案 0 :(得分:0)
将资源的所有命令/操作放入队列中,并让单个线程处理此队列。如果您希望写入/用户操作优先,请不要使用队列,而是使用列表,并将这些操作添加到顶部。
答案 1 :(得分:0)
我已尝试使用lock语句执行此操作,但您无法等待锁定语句中的任务。
如果你使用SemaphoreSlim
,你甚至可以异步“锁定”:
SemaphoreSlim semaphore = new SemaphoreSlim(1, 1);
await semaphore.WaitAsync(); //acquire "lock"
try
{
//...
await DoSomethingAsync();
}
finally
{
semaphore.Release(); //release "lock"
}