Sử dụng TPL với .NET 4, tôi đang cố gắng quyết định cách thiết kế các API xử lý tương lai. Một khả năng đã xảy ra với tôi là để bắt chước mô hình async nhưng không có một phương pháp End(IAsyncResult)
:Thành ngữ TPL này có tồn tại không?
public Task<int> BeginGetAge()
{
// create and return task
}
public int GetAge()
{
return this.BeginGetAge().Result;
}
Như vậy, người gọi có thể quyết định xem có nên gọi hoặc chặn non-blocking phiên bản của GetAge()
. Hơn nữa, họ có quyền truy cập vào tương lai để có thể xây dựng tiếp tục trên đầu trang của nó etcetera.
Thành ngữ này có hợp lệ không? Có bất kỳ hạn chế rõ ràng hoặc các vấn đề mà tôi đang thiếu? Liệu nó có lẽ thậm chí có một tên chính thức?
Trường hợp thứ hai của bạn sẽ được hưởng lợi rất nhiều từ 'chờ đợi' tôi tin tưởng. – user7116
FYI, Stephen Toub đã đăng về điều này (cung cấp trình bao bọc đồng bộ hóa cho các phương thức không đồng bộ) - tl; dr tránh nó :) xem http://blogs.msdn.com/b/pfxteam/archive/2012/04/13/10293638. aspx và cũng http://blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx –