我有一个异步任务运行一个无限循环做一些实时处理:
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,它将起作用,但我正在寻找更好的解决方案。
(抱歉英语不好)
最佳答案
It will works if SomeCondition() runs another while loop to polling status and return true if conditions set , but I'm looking for better solution.
您需要的是信号而不是轮询循环。如果只需要设置一次信号,可以使用TaskCompletionSource<T>
.如果你想要一个可以设置和重置的信号(无需重建),那么你可以使用 AsyncManualResetEvent
(还有 available from NuGet in my AsyncEx.Coordination library )。
关于具有无限循环的异步任务之间的 C# 同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41197635/