     return self
   }
 
-  open class func run(name: String, threshold: TimeInterval?, block: () -> Void) -> Result {
+  open class func run(name: String, threshold: TimeInterval, block: () -> Void) -> Result {
 
     let measure = self.init(name: name, threshold: threshold)
     measure.start()

      isThresholdExceeded = false
    }

    let result = Result(
      name: name,
      startAt: startAt,
      endAt: _endAt,
      time: time,
      threshold: threshold,
      isThresholdExceeded: isThresholdExceeded,
      file: file,
      function: function,
      line: line
    )

    logger?.didEndMeasurement(result: result)

    return result
  }

  @discardableResult


  // MARK: - Properties

  open let name: String

  open var threshold: TimeInterval?

  open var startAt: TimeInterval?

  open var endAt: TimeInterval?

  // MARK: - Initializers

  public required init(name: String, threshold: TimeInterval? = nil) {

    self.name = name
    self.threshold = threshold
  }

  @discardableResult
  open func start() -> Measure {

    startAt = CACurrentMediaTime()
    return self
  }

  @discardableResult
  open func end() -> Result {

    let _endAt = CACurrentMediaTime()

    guard let startAt = startAt else {
      assertionFailure("Measurement has not begun, please call start()")
      return Result(
        name: name + " :: Measurement has not begun, please call start()",
        startAt: CACurrentMediaTime(),
        endAt: CACurrentMediaTime(),
        time: 0,
        threshold: nil,
        isThresholdExceeded: false)
    }

    endAt = _endAt

    let time = _endAt - startAt

    let isThresholdExceeded: Bool

