Skip to content

Commit 366bee9

Browse files
author
Miguel Ángel Delgado
committed
Reto #15 - php
1 parent bfdca00 commit 366bee9

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
3+
require 'vendor/autoload.php';
4+
5+
use Amp\Loop;
6+
use Amp\Promise;
7+
8+
/*
9+
* De forma nativa, php no tiene soporte para funciones asíncronas.
10+
* Sin embargo, podemos simularlo con la función sleep.
11+
*/
12+
function asyncTask($name, $seconds){
13+
echo "Función asíncrona con nombre $name iniciada en el instante " . date('H:i:s') . "\n";
14+
sleep($seconds);
15+
echo "Función asíncrona con nombre $name finalizada en el instante " . date('H:i:s') . "\n";
16+
}
17+
18+
echo "Simulacion con sleep (No realmente asincrono)\n";
19+
asyncTask('MiFuncion', 5);
20+
21+
/*
22+
* Para realizar tareas asíncronas de forma real, podemos utilizar librerías externas como Amp.
23+
* Amp es una librería que nos permite realizar tareas asíncronas de forma sencilla.
24+
*/
25+
26+
function asyncTaskAmp($name, $seconds){
27+
return Amp\call(function () use ($name, $seconds) {
28+
echo "Función asíncrona con nombre $name iniciada en el instante " . date('H:i:s') . "\n";
29+
yield Amp\delay($seconds * 1000); // Amp\delay espera un tiempo en milisegundos
30+
echo "Función asíncrona con nombre $name finalizada en el instante " . date('H:i:s') . "\n";
31+
});
32+
}
33+
34+
echo "\n\nAsincronía real mediante uso de libreria externa\n";
35+
Loop::run(function () {
36+
asyncTaskAmp('MiFuncion', 5);
37+
});
38+
39+
echo "\n\nEjercicio Extra (solo con Amp, con sleep no se podria hacer)\n";
40+
Loop::run(function () {
41+
// Iniciar las funciones C, B y A en paralelo
42+
$promises = [
43+
asyncTaskAmp('C', 3),
44+
asyncTaskAmp('B', 2),
45+
asyncTaskAmp('A', 1),
46+
];
47+
48+
// Esperar a que las funciones C, B y A finalicen
49+
Promise\wait(Promise\all($promises));
50+
51+
// Iniciar la función D
52+
Loop::run(function () {
53+
asyncTaskAmp('D', 1);
54+
});
55+
});

0 commit comments

Comments
 (0)