         
         return self
     }
-
+    
 }
 
-// MARK: -
+// MARK: - ValueReportingTask
+
+public protocol ValueReportingTask: TaskProtocol {
+    associatedtype ValueType
+    
+    var value: Self.ValueType! { get }
+    func finish(with value: Self.ValueType)
+}
 
 extension ValueReportingTask where Self.ValueType == Void {
     

    
}

// MARK: -

extension NonFailableTaskProtocol {
    


import Foundation

// MARK: - TaskProtocol

public protocol TaskProtocol: class {
    func waitUntilFinished()
}

// MARK: - InitializableTask

internal protocol InitializableTask: TaskProtocol {
    init(conditions: [TaskCondition]?, observers: [TaskObserver]?, asynchronous: Bool, closure: (Self) -> Void)
}

// MARK: - CancellableTask

public protocol CancellableTask: TaskProtocol {
    var cancelled: Bool { get }
