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 № 1To 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.