2012-01-28 17 views
1

私はボタン付きウェブページを持っています。ユーザがボタンを押すと、現在の時刻の電子メールを得る。私は彼に60秒の非同期後に別のメッセージを送る必要がある。[彼は何度も彼が何度もボタンを押すことができる]遅延を伴う非同期関数C#

どうすればいいの? @Holystreamが提案されているよう

+1

使用したJavaScriptのsetTimeout関数です。 – Holystream

+0

そこにサーバー側の方法があります – maggie

+0

どのようにするかは、2番目の電子メールが送信されるかどうかによって異なります。 60秒以内にサーバーを再起動しても、電子メールの送信は必要ですか、それとも問題はありませんか?電子メールが遅れていても大丈夫です。遅くではなく、まったく送信しないでください。 –

答えて

1

は別のAJAX呼び出しを実行するための答え

// Wait X Sec and then try to send message 
System.Timers.Timer t = new System.Timers.Timer(); 
t.Interval = Convert.ToDouble(ConfigurationManager.AppSettings["timer"]); 
t.Elapsed += delegate { /*your function here */}; 
t.Start(); 
t.AutoReset = false; // do it once 
0

あなたは、クライアント側でそれを行うことができますが、ユーザーはthsoe 60秒でページを離れた場合、それは失敗し、ましてや、ブラウザを閉じます。

独自のキューメカニズムを作成したくない場合は、Windowsスケジューラを使用してみてください。その電子メールを送信するアプリケーションのURLにアクセスするタスクを作成するだけです。そのような要求がたくさんありませんし、分が絶対に重要でない場合(スケジューラはそのような決議のために設計されていません)

0

スケジュールのデータをスケジュールタイムスタンプ付きのDBに保存する必要があります。

基準はそれを無視するためにスケジュールされた電子メールがすでにある場合は、DBに検証することができ、その時点では存在しているユーザーの押しボタンを複数回場合。

スケジュールされた時間が経過すると、DBのデータから電子メールを送信するページを呼び出すようにCron Job(Scheduler)サービスを設定する必要があります。

あなたが必要とする精度に基づいて、あなたは電子メールを送信するためにcronジョブのための短い時間を設定する必要があります。

独自のスケジューラーサービスを設定したい場合は、1つの良いC#ライブラリーがhttp://csharp-source.net/open-source/job-schedulers/quartz-netです。

これが役に立ちます。ここではそれを見た後に

関連する問題