• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

使用async/await和Task进行时间关键处理有什么区别?

c/c++ 来源:Jon 4次浏览

比方说,我有一种方法,每隔10ms不断接收输入,将数据添加到Queue<T>,另一个线程出列并执行一些处理,并写入文件以保持一切流畅。原因是因为处理将花费超过10毫秒。使用async/await和Task进行时间关键处理有什么区别?

在使用.Net 4更新此方法时,我将使用长时间运行选项启动一个新任务,以确保创建新线程。有一个BlockingCollection<T>将数据添加到任务方法中并使用BlockingCollection调用GetConsumingEnumerable来处理数据并将其写入文件。

首先,我不完全确定是否需要任务来创建新线程,但由于我的无知,这似乎是最有效的方法。其次引进的asyncawait关键字

我可能再次改写这个,这样当数据到来时,调用标有async这确实处理,然后调用await FileStream.WriteAsync的方法。这将确保相隔10ms进入的数据是否可以正常处理,并且没有后台日志?我发现这些新关键字不会创建新线程,而只是以某种方式及时处理执行。

在我的情况下,这对我有什么好处,还是应该坚持使用长时间运行的Task和BlockingCollection创建新线程?


===========解决方案如下:

如果您每隔10ms收到一次输入并且处理时间超过10ms,那么除非您在后端进行并行处理,否则您将无法跟上。

听起来像生产者/消费者的方法是最适合你的情况。您可以将BlockingCollection<T>用于单独的线程/任务,但您还应该考虑Dataflow library(新VS异步支持的一部分)。数据流库允许您设置一个流水线(或网格),用于定义数据在系统中的流动方式;任务根据需要自动创建。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)