Я сам пострадал от этого, и по разным причинам я не могу обновить проекты до .NET 4.5, поэтому мне пришлось разработать обходной путь.
Поскольку это проблема только для проектов XAML, имеющихxmlns
объявление, указывающее на себя. Я могу использовать async во всех других проектах, на которые есть ссылки.Это означает, что моя архитектура все еще использует async / await и готова к переходу на .NET 4.5 позже.
Но в затронутых проектах XAML я просто вручную (плохо) реализую вещи ожидания, иначе выполненные компилятором,
Итак, код, который был таким чистым раньше:
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);
}
Теперь становится таким:
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);
}
});
Не идеальноконечно, и это именно то, что async/await
было создано, чтобы решить.Но это работает как краткосрочный обходной путь, по крайней мере, для простого использования await
.