Sono stato colpito da questo me stesso e per vari motivi non posso aggiornare i progetti a .NET 4.5 quindi ho dovuto sviluppare una soluzione alternativa.
Poiché questo è solo un problema per i progetti XAML che ha una dichiarazione xmlns
che punta a se stessa, sono in grado di utilizzare async su tutti gli altri progetti a cui si fa riferimento. Ciò significa che la mia architettura sta ancora utilizzando async/await ed è pronta per il passaggio a .NET 4.5 in seguito.
Ma nei progetti XAML interessati, ho solo implementato manualmente (male) le cose attese altrimenti dal compilatore.
Quindi il codice che è stato questo puliti prima:
try
{
var foo = GetFoo();
foo.DoStuff();
var data = await foo.GetDataAsync();
bar.WorkOnData(data);
}
catch (Exception ex)
{
// Logging, throw up a popup, whatever...
HandleError("Failed to get data", ex);
}
Ora diventa questo:
var foo = GetFoo();
foo.DoStuff();
var getDataTask = foo.GetDataAsync();
getDataTask.ContinueWith(t =>
{
if (t.IsFaulted)
{
// Logging, throw up a popup, whatever...
HandleError("Failed to get data", t.Exception);
return;
}
if (t.Status == TaskStatus.RanToCompletion)
{
bar.WorkOnData(t.Result);
}
});
Non è l'ideale, naturalmente, e questa è la cosa esatta che async/await
è stato creato per risolvere. Ma funziona come soluzione alternativa a breve termine, almeno per gli usi semplici di await
.
fonte
2012-09-19 08:45:46
Puoi pubblicare i tuoi comandi.rsp? – KMoraz