Possiedo una libreria di classi portatile (PCL) indirizzata a Profile158 (Windows Store, .NET 4.5, Silverlight 5, Windows Phone 8). Posso facilmente lavorare con metodi che restituiscono un tipo di attività, e tutto funziona come mi aspetterei. Ogni volta che accedo alla proprietà Result, termina l'esecuzione del codice asincrono e restituisce il risultato.Utilizzo di Microsoft.bcl.async in PCL con Mono Droid?
Tuttavia, se utilizzo le parole chiave asincrone/attese in un metodo all'interno del PCL, viene restituito un compito. Tuttavia, quando tento di accedere alla proprietà Result, blocca e non restituisce mai.
Guardando la finestra di output di debug in Visual Studio in entrambi i casi che vedo lo stesso testo:
Thread started:
Thread started:
Loaded assembly: Mono.Security.dll [External]
Thread started:
Thread started:
Così sembra come se il codice viene eseguito, ma non è mai torna al thread UI. Qualcun altro ha provato a utilizzare un PCL con Microsoft.bcl.async nel PCL?
Il mio progetto Mono Droid è destinato a Android 2.1.
Grazie, - John
Aggiornamento:
Ecco alcune ulteriori informazioni sui diversi scenari. In primo luogo, qui è il codice che funziona su Mono Droid quando scritto nel codice di interfaccia utente:
var task = request.GetResponseAsync();
string html = task.Result.GetResponseText();
Poi ho creato il seguente metodo nel PCL:
public async Task<string> Test()
{
IHttpResponse responce = await GetResponseAsync();
return responce.GetResponseText();
}
e chiamarlo con questo codice dal Mono codice UI:
string html = request.Test().Result;
che non restituisce mai ...
Se si utilizza la proprietà Result, questa verrà bloccata fino al completamento dell'attività. Se lo fai dallo stesso thread in cui l'attività stessa deve essere eseguita, ti sei praticamente dato un deadlock. Non è affatto chiaro cosa fa il tuo codice in questo momento ... hai un programma breve ma completo che mostri il problema? –
@dsplaisted ha usato questo livello con MonoDroid durante la sua dimostrazione a BUILD - http://channel9.msdn.com/Events/Build/2012/3-004 - Aggiungerò il tag PCL a questo post e metto fuori un segnale bat - sarà presente durante le ore di Redmond ... – Stuart
Non correlato alla tua domanda, ma Microsoft.Bcl.Async è ancora beta. Dovrebbe essere evitato l'uso in qualsiasi codice di produzione. Certo, potresti testarlo proprio adesso. –