使用任务与使用线程监视任务



上下文:根据我们在某些Azure功能中使用的服务,我们有一项任务可能需要30秒到5分钟。

我们计划监视该任务对象的当前状态,以确保它正在运行并且没有被取消/出现故障。

有两种方法可以绕过它:

  • 创建一个任务,运行它,然后在主任务完成后取消它。或者,可以使用Task.Delay和带有条件的一段时间
  • 创建一个线程,运行它并等待它完成(使用while条件以避免while永远运行(

我们做了一些研究,并意识到两者都有利弊。但我们仍然不确定哪种方法是最好的,也不确定为什么。

在类似的场景中,您会使用什么?任务、线程或其他什么?

使用线程有点浪费,但稍微可靠一些。

  1. 这是浪费,因为每个线程只为其存在分配1MB的内存。

  2. 它更可靠,因为它不依赖于运行计时器事件的ThreadPool线程的可用性。对ThreadPool线程的需求突然爆发可能会使ThreadPool在几秒钟甚至几分钟内(在极端情况下(处于饥饿状态。

因此,如果浪费1MB内存对应用程序来说不是问题,请使用线程。另一方面,如果事件时间安排的绝对精度不重要,请使用任务。

您也可以使用以选项LongRunning开头的任务,但这本质上是一个伪装的线程。

最新更新