Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重复性作业不会';我不会在规定的时间接到电话_C#_Hangfire - Fatal编程技术网

C# 重复性作业不会';我不会在规定的时间接到电话

C# 重复性作业不会';我不会在规定的时间接到电话,c#,hangfire,C#,Hangfire,我有一个经常性的工作,这是所谓的启动。 它应该每20秒调用PlaceOrder() 工作看起来像这样 RecurringJob.AddOrUpdate<MethodCaller>(a => a.PlaceOrder(), "*/20 * * * * *"); 问题是这两种方法都是每15秒调用一次,有时是每30秒调用一次,而不是每20秒调用一次 日志: PLACED : 1:59:27 REVOKED : 1:59:32 PLACED : 1:59:42 REVO

我有一个经常性的工作,这是所谓的启动。 它应该每20秒调用PlaceOrder()

工作看起来像这样

 RecurringJob.AddOrUpdate<MethodCaller>(a => a.PlaceOrder(), "*/20 * * * * *"); 
问题是这两种方法都是每15秒调用一次,有时是每30秒调用一次,而不是每20秒调用一次

日志:

PLACED : 1:59:27 
 REVOKED : 1:59:32 
PLACED : 1:59:42 
 REVOKED : 1:59:47 
PLACED : 2:00:12 
 REVOKED : 2:00:17 
PLACED : 2:00:27 
 REVOKED : 2:00:32 
PLACED : 2:00:43 
 REVOKED : 2:00:48 

我希望每隔20秒调用PlaceOrder()和RevokeOrder()方法。但是它们之间应该有5秒的延迟。如何修复它?

请参阅下面解决此问题的工作控制台应用程序。使用计时器而不是重复作业

class Program
    {
        static void Main(string[] args)
        {
            var startTimeSpan = TimeSpan.Zero;
            var periodTimeSpan = TimeSpan.FromSeconds(20);

            var timer = new System.Threading.Timer(async (e) =>
            {
                await PlaceOrderAsync();
            }, null, startTimeSpan, periodTimeSpan);
            Console.ReadLine();
        }

        private static async Task PlaceOrderAsync()
        {
            DateTimeOffset d = DateTimeOffset.Now;

            Console.WriteLine("PLACED : {0}", d);
            await Task.Delay(5000).ContinueWith(t => RevokeOrder());
        }

        public static void RevokeOrder()
        {
            DateTimeOffset d = DateTimeOffset.Now;

            Console.WriteLine("REVOKED : {0}", d);
        }
    }

不确定这是否会修复它,但在Task.Delay(5000)前面添加一个wait,并将该方法设置为asyncTask@RyanGaudion成功了。问题仍然是相同的。请在重复作业周围显示代码。您是如何设置的?如果您指的是hangfire设置代码,那么当只需要启动一种方法时,hangfire工作正常。当我试图从PlaceOrder()调用RevokeOrders()时,它会变得混乱吗?任务有问题,可能会延迟吗?
class Program
    {
        static void Main(string[] args)
        {
            var startTimeSpan = TimeSpan.Zero;
            var periodTimeSpan = TimeSpan.FromSeconds(20);

            var timer = new System.Threading.Timer(async (e) =>
            {
                await PlaceOrderAsync();
            }, null, startTimeSpan, periodTimeSpan);
            Console.ReadLine();
        }

        private static async Task PlaceOrderAsync()
        {
            DateTimeOffset d = DateTimeOffset.Now;

            Console.WriteLine("PLACED : {0}", d);
            await Task.Delay(5000).ContinueWith(t => RevokeOrder());
        }

        public static void RevokeOrder()
        {
            DateTimeOffset d = DateTimeOffset.Now;

            Console.WriteLine("REVOKED : {0}", d);
        }
    }