我有两个正在连续执行的任务(TaskA 和 TaskB)。 TaskA 首先检查是否有来自 TaskB 的请求,如果有则处理它并继续前进。 TaskB 首先向 TaskA 发送请求,并在成功接收到请求后进行处理。我有以下伪代码:
class RequestLock
{
public volatile bool Request;
public string Data;
}
classA
{
public void Run(RequestLock req)
{
while (true)
{
if (req.Request)
{
req.Data = "something"
req.Request = false;
}
this.doSomething();
}
}
}
classB
{
public void Run(RequestLock req)
{
while (true)
{
req.Request = true
while (req.Request)
{
sleep(10);
}
# access req.Data
}
}
}
有没有更好的方法来实现这个目标?
是的。
您显示的代码将无法可靠地工作。但幸运的是,.NET 有很多内置类可以帮助您完成此任务,其中一些已被提及:
BlockingCollection
(添加项目并等待它们被处理),或 ConcurrentQueue
(处理先入项目) -先出队列,无需手动锁定)为您处理大部分工作。如果你想手动实现队列,至少使用 Semaphore 或 AutoResetEvent。