Pracuję nad komponentem wykonawczym systemu Windows 8, aby interfejs publiczny nie mógł zawierać Task<T>
, ponieważ nie jest typem środowiska uruchomieniowego systemu Windows.Jak można oczekiwać zadania, gdy nie można czekać na
Oznacza to, że nie mogę oznaczyć metody jako async
i nie mogę await
metod private async
w mojej bibliotece. Prowadzi to do pewnego zamieszania związanego z obsługą mojej logiki aplikacji.
W ten sposób zrobię to, co chcę synchronicznie.
Result r = TryGetAuthResultFromFile();
if(r != null)
{
return r;
}
r = GetAuthResultFromWebAuthenticationBroker();
return r;
Problemem jest to, że plik TryGetResultFrom są async Task<Result>
sposoby i metody, która jest powrocie r wraca IAsyncOperation<Result>
próbowałem to (nie jest to kompletny kod ale teoria widać obsłużyć skutkuje kontynuacją i zwróci je, musiałbym zrobić kilka frigging wyników do typów IAsyncOperation).
TryGetAuthResultFromFile().ContinueWith(x=>
{
if(x.Result != null)
{
return x.result;
}
GetAuthResultFromWebAuthenticationBroker().ContinueWith(y=>
{
return y.Result;
});
});
Problem z tym jest to, że nie wydaje WebAuthenticationBroker
pracę, jeśli to nie jest wywoływana z wątku UI. Rzuca pomocny NotImplementedException
bez użytecznego komunikatu o błędzie.
Jak mogę zadzwonić pod numer TryGetAuthResultFromFile
, a następnie poczekać na wynik, a następnie zadzwonić pod numer GetAuthResultFromWebAuthenticationBroker
?
Dzięki, już używałem tej techniki gdzie indziej i robi dokładnie to, czego potrzebuję. Nie jestem pewien, dlaczego nie zauważyłem oczywistego rozwiązania, myślę, że czas w domu. – BenCr