【发布时间】:2016-12-17 10:31:56
【问题描述】:
我有一个运行无限循环的异步任务进行实时处理:
private async void RealTimeProcessingAsync()
{
while (true)
{
//....
Tmstaus status = await ReadStatusAsync();
switch (status)
{
case Ack:
//...
break;
//...
}
//...
}
}
我创建了另一个异步方法 SendWriteRqst,该方法将命令发布到 RealTimeProcessingAsync(),应该等待状态设置为定义的条件并返回。
public async Task<WriteState> SendWriteRqstAsync(TmCommand tmCmd)
{
//...
await SomeCondition()//based on status value
//...
return wrState;
}
如果 SomeCondition() 运行另一个 while 循环来轮询状态并在条件设置时返回 true,它将起作用,但我正在寻找更好的解决方案。
(抱歉英语不好)
【问题讨论】:
-
SomeCondition()在做什么,从哪里/什么轮询状态? -
实际上是一个任务,它从 RealTimeProcessingAsync() 中轮询一些变量的条件,比如状态变量。
-
所以
SomeCondition()将调用RealTimeProcessingAsync(),但只有在满足某些条件时才会返回,这些条件取决于RealTimeProcessingAsync()所做的状态更改。这就是为什么您必须多次致电RealTimeProcessingAsync()。是这样吗? -
否,RealTimeProcessingAsync() 在与硬件板建立连接时启动,我想根据 RealTimeProcessingAsync() 中的条件实现 SendWriteRqstAsync 异步,这就是我实现 SomeCondition() 的原因
-
所以...
RealTimeProcessingAsync()是在某个时间点启动并永远运行?然后,您希望SendWriteRqstAsync仅在RealTimeProcessingAsync()中满足某些条件时返回。我做对了吗?否则,你能发布一下SomeCondition()在做什么吗?
标签: c# asynchronous task-parallel-library task