none
Windows Serviste Timer İşlem Bitirmediyse Tekrarlamasın RRS feed

  • Soru

  • Merhaba arkadaşlar,

    Datadan 2 dk da bir sorgu çekerek sorgudan gelen satırlarda işlem yapıcam ve geri kayıt edicem.

    Fakat bazen bu dönen listedeki sayı aşırı fazla olursa 2 dk dan daha uzun sürecekse işlemler , yarıda kesilmemesi adına işlem bitene kadar timer ı tetiklemeyi nasıl durdurabilirim.

    Yani bir timer 2 dk da bir çalışacak fakat işi uzunsa yapmaya devam edip bitecek gibi bir mantık

    C#

    İyi çalışmalar dilerim..

    28 Kasım 2016 Pazartesi 12:46

Yanıtlar

  • Var. Timer kullanmamak, bunun yerine Delay ve ContinueWith kullanmak. Örneğin;

    void Başla()
    {
       İşlemYap();
    }
    
    void Sonrakiİşlem()
    {
        Task.Delay(TimeSpan.FromSeconds(2)).ContinueWith(_ => {
          İşlemYap();
        });
    }
    
    void İşlemYap()
    {
       //işlemler işlemler işlemler....
    Sonrakiİşlem(); }
    Delay işlemini iptal etme gibi bir ihtiyacın olursa CancellationTokenSource'u incelemelisin.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com




    28 Kasım 2016 Pazartesi 18:35
    Moderatör
  • Yukarıdaki örnek yeterli olmalı , OnStart methodunda İşlemYap() ı çağrırsan servis başladığında çalışacak.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak İşaretleyen RecepKurum 29 Kasım 2016 Salı 14:44
    29 Kasım 2016 Salı 14:39
    Moderatör

Tüm Yanıtlar

  • Var. Timer kullanmamak, bunun yerine Delay ve ContinueWith kullanmak. Örneğin;

    void Başla()
    {
       İşlemYap();
    }
    
    void Sonrakiİşlem()
    {
        Task.Delay(TimeSpan.FromSeconds(2)).ContinueWith(_ => {
          İşlemYap();
        });
    }
    
    void İşlemYap()
    {
       //işlemler işlemler işlemler....
    Sonrakiİşlem(); }
    Delay işlemini iptal etme gibi bir ihtiyacın olursa CancellationTokenSource'u incelemelisin.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com




    28 Kasım 2016 Pazartesi 18:35
    Moderatör
  • Var. Timer kullanmamak, bunun yerine Delay ve ContinueWith kullanmak. Örneğin;

    void Başla()
    {
       İşlemYap();
    }
    
    void Sonrakiİşlem()
    {
        Task.Delay(TimeSpan.FromSeconds(2)).ContinueWith(_ => {
          İşlemYap();
        });
    }
    
    void İşlemYap()
    {
       //işlemler işlemler işlemler....
    Sonrakiİşlem(); }
    Delay işlemini iptal etme gibi bir ihtiyacın olursa CancellationTokenSource'u incelemelisin.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com




    Teşekkürler hocam. Peki ben bu kod yerine ;

    Timer 5 dk da bir çalışacak.

    Timer işe start verdiğinde ben timer ı kapatsam ve bittiğinde tekrar timer ı açsam bu doğru olmaz mı hocam.

    Benim mantığım tek işlem yapılacak ama iş yükü dengesiz geleceğinden bunu nasıl kotarabilirim olayı. Treat olması aynı kayıtların tekrar işlenmesine sebep verebileceğinden problem gibi geldi 

    29 Kasım 2016 Salı 12:07
  • Sana yapılması gerekeni söyledim. Zaten tek işlem yapıyor benim örneğim. Timer tavsiye etmiyorum. Zamana bağlı yapılan her iş çok kırılgan ve yönetilmesi zor olur üzerine timer kullanarak işleri iyice zayıflatmış olursun.

    Yok illede timer kullanacağım diyorsan başka arkadaşların yorumlarını bekle istersen.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    29 Kasım 2016 Salı 14:27
    Moderatör
  • Sana yapılması gerekeni söyledim, Timer tavsiye etmiyorum. Zamana bağlı yapılan her iş çok kırılgan ve yönetilmesi zor olur üzerine timer kullanarak işleri iyice zayıflatmış olursun.

    Yok illede timer kullanacağım diyorsan başka arkadaşların yorumlarını bekle istersen.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    Yok hocam ben başlayacağım bir iş için en doğrusunu bulmak istiyorum. Peki windows servisi başlattığında çalışacak sizinkine ait basit bir örnek kod gönderme şansınız var mıdır rica etsem.


    • Düzenleyen RecepKurum 29 Kasım 2016 Salı 14:30
    29 Kasım 2016 Salı 14:29
  • Yukarıdaki örnek yeterli olmalı , OnStart methodunda İşlemYap() ı çağrırsan servis başladığında çalışacak.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak İşaretleyen RecepKurum 29 Kasım 2016 Salı 14:44
    29 Kasım 2016 Salı 14:39
    Moderatör
  • Yukarıdaki örnek yeterli olmalı , OnStart methodunda İşlemYap() ı çağrırsan servis başladığında çalışacak.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    Teşekkür ederim hocam ilginiz ve yardımlarınız için
    29 Kasım 2016 Salı 14:44