2013-07-22 35 views
8

Có gì đó giống như Scala's Promise trong F # không?Có F # tương đương với Lời hứa của Scala không?

Trong khi tương lai được định nghĩa là một loại chỉ đọc đối tượng giữ chỗ tạo ra cho một kết quả mà chưa tồn tại, một lời hứa có thể được coi như một có khả năng ghi, chứa đơn chuyển nhượng, trong đó hoàn thành một tương lai. Đó là, lời hứa có thể được sử dụng để hoàn thành thành công tương lai với giá trị (bằng cách "hoàn thành" lời hứa) bằng cách sử dụng phương thức thành công. Ngược lại, một lời hứa cũng có thể được sử dụng để hoàn thành một tương lai với một ngoại lệ, bằng cách thất bại lời hứa, bằng cách sử dụng phương pháp thất bại.

Công cụ Async bao gồm một phần của điều này, nhưng nếu bạn có mã hoạt động bên ngoài môi trường Async, Promises là công cụ hữu ích. (Bạn có thể làm những việc như hoàn thành lời hứa trong chuỗi giao diện người dùng, ví dụ - ngay cả khi môi trường giao diện người dùng không biết gì về Async.)

Trả lời

12

.Net tương đương với lời hứa là TaskCompletionSource, vì vậy bạn có thể sử dụng chúng từ F#. Bạn có thể tạo một số Async<T> từ một Task<T> bằng cách sử dụng Async.AwaitTask ví dụ:

let tcs = new TaskCompletionSource<int>() 
let ta: Async<int> = Async.AwaitTask tcs.Task 

//complete completion source using `SetResult`\`SetException` etc. 
Các vấn đề liên quan