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

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

(抱歉英语不好)

最佳答案

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/

相关文章:

c# - 隐式类型和 TDD

javascript - 等待而不是等待解决 promise

testing - 使用 Webpack+karma+etc 进行 Redux 异步测试

javascript - Node : Passing function specific variables to Async. 并行()

c# - 使用 .NET 任务并行库捕获错误

c# - 使用 TPL 任务杀死 .net 控制台应用程序

C# TPL 多列表枚举器一个没有饥饿的修饰符

c# - 由多个游戏对象组件组成的游戏对象的粒子系统行为不同

c# - 如何从<seealso>标记引用“成员”页面?

c# - 可以在非后台线程中启动任务吗?