我正在使用 FluentScheduler 3.1.42,它似乎不支持异步作业。
我们有一些使用 .Wait() 执行异步代码的任务。尽管所有等待语句都没有使用 ConfigureAwait(false),但它们运行良好并且从未导致任务挂起。
我添加了一个更复杂的新任务,它执行多个等待并将WhenAll 与 SemaphoreSlim 模式一起使用。此任务通常有效,但偶尔会挂起(大约一周内只有两次,并且计划在 2 台服务器上每 5 秒运行一次),直到我重新启动 Web 服务器。
所以我的问题是:周期性挂起是否是由于没有在管道中的所有等待语句上调用 configureAwait(false) 引起的?如果是这样,为什么它不是每次都挂起?如果没有,知道什么可能导致我的任务挂起吗?
更新
我更新了代码以处理信号量 slim 以及正在使用的 smtp 对象,这似乎已经解决了问题。我还添加了对 configureAwait 的显式调用以获得良好的度量,并在信号量 try/finally 中包装了更少的等待,因为我不需要像以前那样限制代码的并发性。不完全确定到底发生了什么,但它似乎不再发生了,所以这很酷。