以下を実装する必要があります: ユーザーがメールを入力するページがあります。テキストが変更されるたびに、ユーザーが DB に存在するかどうかを確認する必要があり、その情報に基づいて、ボタンのテキストを「サインアップ」または「サインイン」に設定する必要があります。問題は、この DB リクエストに数秒かかる場合があり (理由は関係ありません)、API が非同期であるため、イベント ハンドラーが で装飾されasync
、メール エントリが数回変更される可能性があるため、このハンドラーが数回呼び出されることです。いずれかが終わる前に。そのため、同時 API リクエストが発生し、ボタン テキストを同時に変更しようとする可能性があり、うまく終了しない可能性があります。私は次のようなことを考えました:
private async void OnTextChanged(object sender, TextChangedEventArgs e)
{
mailEntry.TextChanged -= OnTextChanged;
...
submitButton.Text = (await api.AccountExistAsync(mailEntry.Text)).IsRegistered
? "Sign in"
: "Sign up";
...
mailEntry.TextChanged += OnTextChanged;
}
しかし、この設計の問題点は、たとえば、有効な電子メールが と の間に入力-= OnTextChanged
さ+= OnTextChanged
れた場合、チェックされないことです。
私の質問は、私が達成しようとしていることを実装する正しい方法は何ですか? 前もって感謝します。