     - SeeAlso: Has parity with non-static method
     */
     @discardableResult
-    public static func main(after seconds: Double? = nil, block: @convention(block) () -> Swift.Void) -> Async {
-        return Async.async(after: seconds, block: block, queue: .main)
+    public static func main<O>(after seconds: Double? = nil, _ block: (Void) -> O) -> AsyncBlock<Void, O> {
+        return AsyncBlock.async(after: seconds, block: block, queue: .main)
     }
 
     /**

     - SeeAlso: Has parity with static method
     */
    @discardableResult
    public func utility(after seconds: Double? = nil, chainingBlock: @convention(block) () -> Swift.Void) -> Async {
        return chain(after: seconds, block: chainingBlock, queue: .utility)
    }


     - SeeAlso: Has parity with static method
     */
    @discardableResult
    public func background<O>(after seconds: Double? = nil, _ chainingBlock: (Out) -> O) -> AsyncBlock<Out, O> {
        return chain(after: seconds, block: chainingBlock, queue: .background)
    }

