Sto sviluppando un componente di Runtime di Windows 8 in modo che l'interfaccia pubblica non possa contenere Task<T>
in quanto non è un tipo di runtime di Windows.Come è possibile attendere un'attività quando non è possibile attendere
Ciò significa che non è possibile contrassegnare il metodo come async
e non è possibile utilizzare i metodi private async
nella libreria. Ciò sta portando ad una certa confusione su come gestire la mia logica applicativa.
Ecco come farei ciò che voglio in modo sincrono.
Result r = TryGetAuthResultFromFile();
if(r != null)
{
return r;
}
r = GetAuthResultFromWebAuthenticationBroker();
return r;
Il problema è che il file TryGetResultFrom sono async Task<Result>
metodi e il metodo che sta tornando r sta tornando IAsyncOperation<Result>
Ho provato questo (non si tratta di codice completo, ma la teoria può essere visto, di gestire il risultati in continuazioni e restituirli, dovrei fare un po 'di risultati sui tipi IAsyncOperation).
TryGetAuthResultFromFile().ContinueWith(x=>
{
if(x.Result != null)
{
return x.result;
}
GetAuthResultFromWebAuthenticationBroker().ContinueWith(y=>
{
return y.Result;
});
});
Il problema di questo è che il WebAuthenticationBroker
non sembra il lavoro, se non è stato chiamato dal thread dell'interfaccia utente. Invia un utile NotImplementedException
senza un utile messaggio di errore.
Come posso chiamare TryGetAuthResultFromFile
quindi attendere il risultato, quindi chiamare GetAuthResultFromWebAuthenticationBroker
?
Grazie, ho già usato questa tecnica da qualche altra parte e fa esattamente quello che mi serve. Non sono sicuro del motivo per cui non ho individuato l'ovvia soluzione, a mio avviso. – BenCr