Tôi đã bị ảnh hưởng bởi bản thân mình và vì nhiều lý do tôi không thể nâng cấp các dự án lên .NET 4.5 nên tôi phải phát triển cách giải quyết.
Vì đây chỉ là vấn đề đối với các dự án XAML có khai báo xmlns
trỏ đến chính tôi, tôi có thể sử dụng async trên tất cả các dự án khác được tham chiếu. Điều này có nghĩa là kiến trúc của tôi vẫn đang sử dụng async/await và được chuẩn bị để chuyển sang .NET 4.5 sau này.
Nhưng trong các dự án XAML bị ảnh hưởng, tôi chỉ thực hiện thủ công (kém) những thứ chờ đợi khác được thực hiện bởi trình biên dịch.
Vì vậy, mã đó là này sạch trước:
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);
}
Bây giờ trở này:
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);
}
});
Không lý tưởng tất nhiên, và đây là điều chính xác mà async/await
được tạo ra để giải quyết. Nhưng nó hoạt động như một giải pháp ngắn hạn ít nhất cho việc sử dụng đơn giản là await
.
Nguồn
2012-09-19 08:45:46
Bạn có thể đăng lệnh.rsp không? – KMoraz