【发布时间】:2019-03-09 04:51:40
【问题描述】:
我想运行一个任务来查询数据库以获取用户的新消息。
我希望任务每隔 x 秒运行一次,以新的方式运行,这样它就不会导致 UI 变得无响应。
如果数据库任务找到消息,那么我希望它使这些消息可用于 UI。
我认为整个循环会在它自己的线程中运行,而不是在 UI 线程中有一个循环,它会每隔 x 秒创建一个新线程。我认为这会停止对数据库的多次调用,例如如果我将查找设置为每 5 秒一次,并且数据库的响应时间超过 5 秒。 我一直在寻找好几个小时 - 我发现的最好的文章是: https://blogs.msdn.microsoft.com/benwilli/2016/06/30/asynchronous-infinite-loops-instead-of-timers/
我是线程新手,上面的链接在最后一个示例 DoWorkAsyncInfiniteLoop 中似乎相对简单,但它似乎在 UI 线程上运行(尽管它提到您可以使用 Task.Run 使其在自己的线程中运行,而且我不确定 UI 线程如何使用找到的消息。
任何建议将不胜感激!
【问题讨论】:
-
你试过什么?你的代码呢?
-
如上所述,在我剪切任何代码之前,我已经研究了各种选项。认为我将在单独的线程和调度程序上使用无限循环以获取结果。
标签: c# multithreading timer