利用可能な予定についてビジネス クライアントに通知する asp.net Web アプリケーションがあります。シナリオは以下の通り。
- ページ ボタン クリック イベント ハンドラーは、新しい予定をデータベースに保存します。
- 登録されたクライアントの設定は、作成された新しい予定に一致します
- 好みが一致するクライアントには、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 には到達しません。
これで問題が解決することを願っています。