经常性工作没有在设定的时间被调用
Recurring job doesn't get called on set time
我有一个在启动时调用的循环作业。
它应该每 20 秒调用一次 PlaceOrder()。
工作看起来像这样
RecurringJob.AddOrUpdate<MethodCaller>(a => a.PlaceOrder(), "*/20 * * * * *");
PlaceOrder() 方法在延迟 5 秒后调用 RevokeOrder()。
方法
public void PlaceOrder()
{
DateTimeOffset d = DateTimeOffset.Now;
Debug.WriteLine("PLACED : {0}", d);
Task.Delay(5000).ContinueWith(t => RevokeOrder());
}
public void RevokeOrder()
{
DateTimeOffset d = DateTimeOffset.Now;
Debug.WriteLine("REVOKED : {0}",d);
}
问题是这两种方法每 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 秒的延迟。我该如何解决?
请参阅下面解决该问题的工作控制台应用程序。使用计时器而不是 recurringJob。
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);
}
}
我有一个在启动时调用的循环作业。 它应该每 20 秒调用一次 PlaceOrder()。
工作看起来像这样
RecurringJob.AddOrUpdate<MethodCaller>(a => a.PlaceOrder(), "*/20 * * * * *");
PlaceOrder() 方法在延迟 5 秒后调用 RevokeOrder()。
方法
public void PlaceOrder()
{
DateTimeOffset d = DateTimeOffset.Now;
Debug.WriteLine("PLACED : {0}", d);
Task.Delay(5000).ContinueWith(t => RevokeOrder());
}
public void RevokeOrder()
{
DateTimeOffset d = DateTimeOffset.Now;
Debug.WriteLine("REVOKED : {0}",d);
}
问题是这两种方法每 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 秒的延迟。我该如何解决?
请参阅下面解决该问题的工作控制台应用程序。使用计时器而不是 recurringJob。
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);
}
}