2016-05-26 16 views
0

私は特定のユーザーによって生成されたつぶやきを10分ごとに読み取るasp.net mvcアプリケーションを作成しました。私はこの作業をタイマーで行います。タイマーは2〜5回完全に実行され、タイマーは例外またはエラーなしで停止します。なぜ私のasp.net mvcタイマーが停止しますか?

誰かがこれが起こる理由を知っていますか?タイマを停止するまで、常に実行するように設定する方法はありますか?

ここでタイマー設定やタイマーのハンドラ:

Public Shared Function Start() 
    Dim db As New EnubexDbContext 
    Dim provider As CultureInfo = CultureInfo.InvariantCulture 
    Dim tiempo As Double = Convert.ToDouble(db.ParametrosGenerales.Where(Function(pg) pg.sDescripcionParametroGeneral = "frecuenciaSeekerTwitterTimer").Select(Function(pg) pg.sValorParametroGeneral).FirstOrDefault()) 
    If Not IsNothing(tiempo) Then 
     timer = New Timer(tiempo) 
     If Not IsNothing(timer) Then 
      ApplicationLog.EscribirActividad("Se creo el objeto timer") 
     End If 
     Try 
      AddHandler timer.Elapsed, New ElapsedEventHandler(AddressOf Handler) 
      ApplicationLog.EscribirActividad("Se agregó el handler") 
      timer.Enabled = True 
      If Not IsNothing(timer) Then 
       ApplicationLog.EscribirActividad("Se activó el timer") 
      End If 
      Return (0) 
     Catch ex As Exception 
      ApplicationLog.EscribirExcepctionLog(ex) 
      Return (1) 
     End Try 
    Else 
     Return (1) 
    End If 
End Function 

Shared Async Sub Handler(ByVal sender As Object, ByVal e As ElapsedEventArgs) 
    ApplicationLog.EscribirActividad("Empezando búsqueda") 
    Try 
     Await SeekTwitter() 
     ApplicationLog.EscribirActividad("Terminando búsqueda") 
    Catch ex As Exception 
     ApplicationLog.EscribirExcepctionLog(ex) 
    End Try 
End Sub 
+1

これはおそらく、AppPoolがリサイクルしてタイマーを破棄しているためです。 'Start()'はどこから呼び出されますか? –

+3

ASP.NETでバックグラウンドプロセスを実行しないでください。あなたはうんざりします。 Scott Hanselmanは彼のブログ[here](http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx)でそれについて議論します。 – mason

答えて

2

この権利を行うには容易ではありません。幸いなことに、狂ったスマートデベロッパーはすでにあなたのために苦労しています。

をご覧ください。これは、安全にAsp.netアプリのスケジュールで実行するタスクをスケジュールすることができます。

+0

こんにちは、あなたの答えに感謝します。 RecurringJob.AddOrUpdate(Of SeekerTwitterTimer)(Function()SeekerTwitterTimer.SeekTwitter、 "*/15 * * * *")を実行していますが、このコード行をプロジェクトに使用しています。アプリケーション私は次のエラーが発生しています: "式本体は' MethodCallExpression'型でなければなりません パラメータ名:methodCall "。あなたは何が起こっているか考えていますか? – Henry

+0

@HenryかもしれないこのRecurringJob.AddOrUpdate(()=> SeekerTwitterTimer.SeekTwitter()、 "*/15 * * *"); – etoisarobot

+0

私が作ったコードはVB.NETの構文であり、コードはC#の構文です – Henry

関連する問題