首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FluentScheduler任务挂起

FluentScheduler任务挂起
EN

Stack Overflow用户
提问于 2017-01-26 13:05:45
回答 1查看 897关注 0票数 0

我使用的是FluentScheduler 3.1.42,它似乎不支持异步作业。

我们有几个使用.Wait()执行异步代码的任务。它们运行良好,从未导致任务挂起,尽管所有等待语句都没有使用ConfigureAwait(false)。

我添加了一个更复杂的新任务,它执行多个等待,并将WhenAll与SemaphoreSlim模式结合使用。此任务通常有效,但偶尔挂起(大约一周内只挂两次,计划每5秒在2台服务器上运行),直到我重新启动web服务器为止。

因此,我的问题是:周期性挂起是否是由于在管道中所有等待语句上不调用configureAwait(false)造成的?如果是的话,为什么不每次挂起来呢?如果没有,你知道是什么原因导致我的任务挂起吗?

更新

我更新了我的代码来释放slim信号量和一个正在使用的smtp对象,这似乎解决了这个问题。我还添加了对configureAwait的显式调用,以获得更好的度量,并且在信号量尝试/最后封装了更少的等待,因为我不需要限制代码的并发性。不完全确定到底发生了什么,但似乎已经不再发生了,所以这很酷。

EN

回答 1

Stack Overflow用户

发布于 2017-01-26 13:20:24

可能没有上下文(SynchronizationContext.Current / TaskScheduler.CurrentTaskScheduler.Default不同),如果这是正确的,那么您可能不需要ConfigureAwait(false)

如果没有,你知道是什么原因导致我的任务挂起吗?

当然,如果没有密码,任何答案都是完全的猜测,但如果我不得不猜测.

使用SemaphoreSlim模式

我猜您的代码没有发布SemaphoreSlim。例如,如果您忘记将Release封装在finally块中,那么异常将导致信号量被锁定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41874112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档