3

利用可能な予定についてビジネス クライアントに通知する asp.net Web アプリケーションがあります。シナリオは以下の通り。

  1. ページ ボタン クリック イベント ハンドラーは、新しい予定をデータベースに保存します。
  2. 登録されたクライアントの設定は、作成された新しい予定に一致します
  3. 好みが一致するクライアントには、Twilio を介して予約の詳細を含む SMS メッセージが送信されます。

私の問題は、ステップ 2 と 3 をページの実行から分離する必要があることです。そのため、予定が作成されると、ページ コントロールが戻り、ユーザーが別のページにリダイレクトされる間、バックグラウンド スレッドでマッチングと SMS メッセージングを処理するヘルパー クラスに次の手順が非同期に渡されます。バックグラウンド クラス メソッドは値を返しません (public void)。

以前にコードを投稿しなかったことをお詫び申し上げます。

createappointment.aspx.cs

  private void SaveAppointment()
{
    using (var db = new EntitiesModel())
    {
       //code to create a new appointment

     //Sending SMS messages to multiple clients

        SMSHelper myhelper = new SMSHelper();
        myhelper.SendApptSMS(newappt);

        //control returned to the page redirect to dashboard
        Response.Redirect("~/authuser/default.aspx");
    }
}

smshelper.cs

public async void SendApptSMS(Appointment newappointment)
{
    using (var db = new EntitiesModel())
    {
        //retrieve multiple clients that match preferences
    foreach (var item in clients)
   {
      //for each client send SMS message using Twilio's REST API
    }
        //Thread.Sleep(10000);

    }
}

async メソッドへの呼び出しが行われると、ページの処理が続行され、バックグラウンド スレッドで実行されることを期待しています。これは起こりません。SMSHelper がすべてのメッセージの送信を完了するまで、response.redirect には到達しません。

これで問題が解決することを願っています。

4

1 に答える 1

-1

バックグラウンドで 1 分に 1 回 (またはその程度) 実行され、SendApptSMS() メソッドを実行する別のサービスまたはバックグラウンド タスクを用意しないのはなぜですか?

于 2013-08-14T15:51:51.113 に答える