如何堆栈方法调用?

时间:2017-10-30 15:14:20

标签: c# wpf

我有一个使用资源的WPF应用程序。该资源可以以两种方式使用:

  • IU事件。当用户单击视图的不同元素时,它会写入一个值。
  • 在后台任务上。定期读取各种值。

当阅读正在进行且用户必须写作时,我遇到了问题。我想堆栈对资源方法的调用,以便顺序执行它们。

这些是资源的方法:

  • 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

有没有办法用所有参数值堆叠这些方法调用?

2 个答案:

答案 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"
}