Sam zostałem przez to trafiony iz różnych powodów nie mogę uaktualnić projektów do .NET 4.5, więc musiałem opracować obejście.
Ponieważ jest to tylko problem dla projektów XAML, które mają deklarację xmlns
wskazującą na siebie, jestem w stanie używać asynchronizacji we wszystkich innych projektach, do których się odwołuje. Oznacza to, że moja architektura nadal wykorzystuje asynchroniczne/oczekiwane i jest przygotowana na przejście do .NET 4.5 później.
Ale w projektach XAML, których dotyczy problem, po prostu ręcznie wdrażam (słabo) oczekuję na rzeczy wykonywane przez kompilator.
więc kod, który był to czysty przed:
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);
}
Teraz staje się w ten sposób:
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);
}
});
Nie idealne, oczywiście, i to jest dokładnie rzecz, która async/await
został stworzony w celu rozwiązać. Ale działa to jako krótkoterminowe obejście, przynajmniej dla prostych zastosowań await
.
Czy umieścisz swój plik commands.rsp? – KMoraz