PHP 异步

WBOY
WBOY原创
2024-08-29 12:51:451156浏览

这里的Async代表Asynchronous,意思是进程不是同步的。异步允许并行执行代码。这意味着我们可以单独且彼此独立地运行这段代码。这通常被称为异步过程,在PHP中也是如此。 PHP 中有异步模型,它允许我们同时执行多任务。它使代码的执行速度更快并提高了性能。

广告 该类别中的热门课程 PHP 开发人员 - 专业化 | 8 门课程系列 | 3次模拟测试

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

语法:

在 PHP 中,我们可以使用 Spatie 包来使用异步功能。使用这个包,我们可以创建一个池来处理我们的异步调用并帮助我们提供程序的并行执行。为了更好地理解,我们可以看一下语法。见下文;

//package to be used
use Spatie\Async\Pool;
$mypool = Pool::create();
$mypool[] = async() {
//your logic goes here
})->then() {
// your logic
});

首先,我们需要导入包,这里是‘SpatieAsyncPool’。之后,我们将创建一个池来为我们处理异步操作。接下来是“async”关键字,我们将编写我们想要并行运行的整个逻辑和代码段。这里我们有一个“then”方法,它是一个回调方法。在这里面,我们还可以编写自己的逻辑。完成所有操作后,我们可以在“then”块中对给定输出编写更多操作。

PHP 中的异步函数如何工作?

现在我们知道异步函数允许我们执行多个任务。如果我们谈论 PHP 中的同步编程,那么我们将始终以相同的顺序获得输出。假设我们想要打印从 1 到 10 的数字。因此,如果我使用同步代码编写此逻辑,我将始终按升序获得它。但是,如果我们尝试在此处使用异步代码来实现相同的逻辑,那么我们不确定数字的顺序。我们将通过下面的一些示例更详细地讨论这一点。为了用 PHP 编写异步代码,我们使用了一个名为“spatie”的包。这也为我们提供了更好地处理异步代码中的错误和异常的能力。首先,我们将了解如何使用此包编写简单的逻辑。然后我们稍后将详细讨论更多可以与异步代码一起使用的方法。

  • 为了创建异步块,我们首先需要导入或使用包“spatie”。我们可以将其导入到我们的代码中,如下所示;我们将使用 Composer 安装这个包。您还可以在语法下方找到 Composer 命令。

示例:

use Spatie\Async

cmd:

composer require spatie
  • 第二步是我们将创建一个池对象。通过使用这个对象,我们可以编写异步函数。请参阅下面的语法以更好地理解;

示例:

$mypool = Pool::create();

我们可以为池对象指定任何名称。另外,不要忘记导入“Async”中存在的 Pool 类。见下文;

示例:

use Spatie\Async\Pool;
  • 在这一步中,我们现在可以使用池对象创建异步函数。我们可以给函数起任何名称并编写我们的逻辑。为了更好地理解,请参阅下面的语法;

示例:

demoAsync(function () {
// //
})
->then(function ($output) {
// //
})

在上面的代码中,我们创建了一个异步函数并使用它的回调方法“then”。这个“then”函数负责在上面的代码块成功执行时进行操作。如果没有,那么我们需要使用 Async 的其他方法来处理这种情况。

现在我们将看到一些方法来处理执行代码时可能发生的错误、异常和超时。这个包为我们提供了各种方法来在代码的异步块内处理这个问题。让我们详细讨论它们。见下文;

1.超时

当代码块未能在预期时间范围内执行其操作或遇到错误时,将执行该方法。以下是编写此方法的语法:

示例:

timeout(function () {
// when timeout reached.
})

2.然后

如果代码块执行成功并且需要对结果执行额外的操作,则该方法将被执行。以下是编写此方法的语法:

示例:

then(function ($result) {
// operation after result
})

3.抓住

如果代码块抛出异常,该方法将被执行。在这个方法中,我们可以处理它们并执行我们的逻辑。编写此方法的语法如下所示;

示例:

catch(function ($exp) {
// exception can be handle here.
})

Examples of PHP async

Following are the examples given below:

Example #1

In this example, we are implementing async with the method and printing two messages to keep it simple for beginners.

Code:

use Spatie\Async\Pool;
$mypool = Pool::create();
$mypool
->asyncDemo(function () {
print("async called here !!")
})
->then(function () {
print("then called after result !!")
} ;

Output:

PHP 异步

Example #2

In this example, we are using all the methods of async from the Spatie\Async\ package. Those are catch, then, and timeout. We keep it simple for now without too much logic.

Code:

use Spatie\Async\Pool;
$mypool = Pool::create();
$mypool
->asyncDemo(function () {
print("async called here !!")
print("async called here !!")
})
->then(function ($output) {
print("print called here !!")
})
->catch(function ($exception) {
print("catch called here !!")
})
->timeout(function () {
print("timeout called here !!")
})
;

Output:

PHP 异步

Conclusion

By using async in our code, we can enable parallel execution of tasks in our program. Also, they increase the performance of the code because the piece of code is independent of each other. But using StopIteration in situations where the data from the previous block of code is dependent on the current can lead to data loss and inconsistency.

以上是PHP 异步的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:PHP strlen()下一篇:PHP Date Time Functions