具有无限while循环的异步任务之间的C#同步?

时间:2016-12-17 10:31:56

标签: c# asynchronous task-parallel-library task

我有一个异步任务运行无限循环执行一些实时处理:

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,它将起作用,但我正在寻找更好的解决方案。

(抱歉英语不好)

1 个答案:

答案 0 :(得分:4)

  

如果SomeCondition()运行另一个while循环到轮询状态并且如果条件设置则返回true,它将起作用,但我正在寻找更好的解决方案。

你想要的是信号而不是轮询循环。如果您只需要设置一次信号,则可以使用TaskCompletionSource<T>。如果您想要一个可以设置和重置的信号(无需重建),那么您可以使用AsyncManualResetEvent(也是available from NuGet in my AsyncEx.Coordination library)。