/ / Wywołaj metodę asynchroniczną z modułu obsługi walidatora ASP.NET - asp.net, async-czekaj

Wywołaj metodę asynchroniczną z modułu obsługi poprawnego programu ASP.NET - asp.net, async-await

Mam czerwony, jak pracować z metodą asynchroniczną w aplikacji ASP.NET przykład Async-ASP.NET.

Teraz muszę zadzwonić do usługi internetowej CustomValidator na ServerValidate Zdarzenie i wynik usługi decyduje, czy wartośćjest ważny czy nie. Metody serwisowe są asynchroniczne i nie jestem pewien, jak sobie z tym poradzić. Jeśli używam programu obsługi zdarzeń async void, walidacja nie działa poprawnie, ponieważ komunikat walidacji nie pojawia się w przypadku niepowodzenia walidacji. Wygląda na to, że await nie czeka na wynik usługi sieciowej, a ASP.NET nie czeka na walidator do wysłania odpowiedzi.

Jaki jest właściwy sposób rozwiązania tego problemu? Albo jak używać RegisterAsyncTask w module obsługi zdarzeń walidatora? Strona jest ustawiona na Async="true".

Fragment mojego kodu:

protected async void cvWorkplace_ServerValidate(object sender, ServerValidateEventArgs e)
{
// do test call to sap
var testResult = await PerformLabelServiceTestCallAsync(materialId, ddPlant.SelectedValue, workplaceName, UsersLanguage);

if (testResult.HasError)
{
e.IsValid = false;

// other stuff
// ...
}
else
{
e.IsValid = true;
}
}

Odpowiedzi:

0 dla odpowiedzi № 1

To natychmiast zwróci, a kod wywołujący będzie oceniany e.IsValid zanim zostanie ustawiony przez cvWorkplace_ServerValidate.

RegisterAsyncTask jest metodą Page class, która jest klasą bazową twojej strony i możesz ją wywołać z cvWorkplace_ServerValidate metoda, która jest metodą Twojej strony.

Ale nawet jeśli zarejestrujesz zadanie asynchroniczne, nie otrzymasz wyniku w pliku cvWorkplace_ServerValidate metoda.

Najlepszym sposobem byłoby zarejestrowanie asynchronicznego zadania, które ustawiłoby pole w klasie strony i odpowiednio wyrenderowało.