# Deferred

Similar to a Deferred of Kotlin carries a function like **`await()`** to return a result when the waiting task is completed.

Keep in mind that when using the Deferred class, you need to specify that it is a [**`Generator`**](https://www.php.net/manual/en/language.generators.php) callback.

```php
CoroutineGen::runNonBlocking(
    function() : Generator {
        $deferred = new Deferred(function() : Generator {
            return yield file_get_contents('http://www.weather.com.cn/data/cityinfo/101270101.html');
        });
        
        $data = yield from $deferred->await();
        var_dump($data);
    },
    function() : Generator {
        yield var_dump("END!");
    },
    function() {
        var_dump("START!");
    },
    function() {
        var_dump("Hello World");
    }
);
```

Output:

```
string(6) "START!"
string(11) "Hello World"
string(4) "END!"
string(10989) "<!DOCTYPE HTML>
<html>
<head>
<link rel="dns-prefetch" href="http://i.tq121.com.cn">
<meta charset="utf-8" />
...."
```
