我有一个异步任务运行无限循环执行一些实时处理:
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,它将起作用,但我正在寻找更好的解决方案。
(抱歉英语不好)
答案 0 :(得分:4)
如果SomeCondition()运行另一个while循环到轮询状态并且如果条件设置则返回true,它将起作用,但我正在寻找更好的解决方案。
你想要的是信号而不是轮询循环。如果您只需要设置一次信号,则可以使用TaskCompletionSource<T>
。如果您想要一个可以设置和重置的信号(无需重建),那么您可以使用AsyncManualResetEvent
(也是available from NuGet in my AsyncEx.Coordination library)。