         super.init(queue: queue) { atomic in
             let _self = atomic as! SDTask<Result>
             if _self._result == nil {
-                _self._lck.synchronized { _self._result = block() }
+                let result = block()
+                _self._lck.synchronized { _self._result = result }
                 _self.signal()
             } else {
                 _self._notify.forEach { $0.signal() }

        super.init(queue: queue) { atomic in
            let _self = atomic as! SDTask<Result>
            if _self._result == nil {
                _self._lck.synchronized { _self._result = block() }
                _self.signal()
            } else {
                if suspend == nil || !suspend!(_self._result!) {

        super.init { atomic in
            let _self = atomic as! SDTask<Result>
            if _self._result == nil {
                let result = block()
                _self._lck.synchronized { _self._result = result }
                _self.signal()
            } else {
                _self._notify.forEach { $0.signal() }
