2016-04-09 16 views
0

Ara sıra bilgi akışı gereken iki tane Quartz.NET işi var. Bunu nasıl yaparım? Buradaİşler arasında bilgi geçişi Quartz.NET

[PersistJobDataAfterExecution] 
[DisallowConcurrentExecution] 
public class PushingJob : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     var keys = context.Scheduler.GetJobKeys(GroupMatcher<JobKey>.AnyGroup()); 

     foreach (var key in keys) 
     { 
      var detail = context.Scheduler.GetJobDetail(key); 
      if (detail.JobType == typeof(PullingJob)) 
      { 
       detail.JobDataMap.Put("Foo", "Bar"); 
      } 
     } 
    } 
} 

Ve verileri almak için bir örnektir: Aşağıda

verileri ayarlamak için bir örnek sınıftır bir DI motorunu kullanıyorsanız

[PersistJobDataAfterExecution] 
[DisallowConcurrentExecution] 
public class PullingJob : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     Console.WriteLine("Foo property = " + context.MergedJobDataMap.GetString("Foo")); 
    } 
} 
+0

gerçekleşebilir Bu iki iş aynı zamanda çalışır? –

+0

potansiyel olarak olası değil –

cevap

1

, bir paylaşabilir Bu iki iş örneği arasındaki tek örnek nesne, eşzamanlı bir sözlüğe sahip.

Aksi takdirde, her zaman bile DI motoru olmadan aralarında statik eşzamanlı sözlüğünü paylaşabilir (daha az zarif ama çalışır) :) Örneğin

, enjeksiyon ile:

[PersistJobDataAfterExecution] 
[DisallowConcurrentExecution] 
public class PushingJob : IJob 
{ 
    DataObject _data; 

    // with injection 
    public PushingJob(DataObject data) 
    { 
     _data= data; 
    } 

    public void Execute(IJobExecutionContext context) 
    { 
     var keys = context.Scheduler.GetJobKeys(GroupMatcher<JobKey>.AnyGroup()); 

     foreach (var key in keys) 
     { 
      var detail = context.Scheduler.GetJobDetail(key); 
      if (detail.JobType == typeof(PullingJob)) 
      { 
       data.MyDict.AddOrUpdate("Foo", "Bar"); 
      } 
     } 
    } 
} 

[PersistJobDataAfterExecution] 
[DisallowConcurrentExecution] 
public class PullingJob : IJob 
{ 
    DataObject _data; 

    // with injection 
    public PushingJob(DataObject data) 
    { 
     _data= data; 
    } 

    public void Execute(IJobExecutionContext context) 
    { 
     Console.WriteLine("Foo property = " + _data.MyDict.GetOrAdd("Foo")); 
    } 
}