1

以下を実装する必要があります: ユーザーがメールを入力するページがあります。テキストが変更されるたびに、ユーザーが 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れた場合、チェックされないことです。

私の質問は、私が達成しようとしていることを実装する正しい方法は何ですか? 前もって感謝します。

4

1 に答える 1