这里的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 中的同步编程,那么我们将始终以相同的顺序获得输出。假设我们想要打印从 1 到 10 的数字。因此,如果我使用同步代码编写此逻辑,我将始终按升序获得它。但是,如果我们尝试在此处使用异步代码来实现相同的逻辑,那么我们不确定数字的顺序。我们将通过下面的一些示例更详细地讨论这一点。为了用 PHP 编写异步代码,我们使用了一个名为“spatie”的包。这也为我们提供了更好地处理异步代码中的错误和异常的能力。首先,我们将了解如何使用此包编写简单的逻辑。然后我们稍后将详细讨论更多可以与异步代码一起使用的方法。
示例:
use Spatie\Async
cmd:
composer require spatie
示例:
$mypool = Pool::create();
我们可以为池对象指定任何名称。另外,不要忘记导入“Async”中存在的 Pool 类。见下文;
示例:
use Spatie\Async\Pool;
示例:
demoAsync(function () { // // }) ->then(function ($output) { // // })
在上面的代码中,我们创建了一个异步函数并使用它的回调方法“then”。这个“then”函数负责在上面的代码块成功执行时进行操作。如果没有,那么我们需要使用 Async 的其他方法来处理这种情况。
现在我们将看到一些方法来处理执行代码时可能发生的错误、异常和超时。这个包为我们提供了各种方法来在代码的异步块内处理这个问题。让我们详细讨论它们。见下文;
当代码块未能在预期时间范围内执行其操作或遇到错误时,将执行该方法。以下是编写此方法的语法:
示例:
timeout(function () { // when timeout reached. })
如果代码块执行成功并且需要对结果执行额外的操作,则该方法将被执行。以下是编写此方法的语法:
示例:
then(function ($result) { // operation after result })
如果代码块抛出异常,该方法将被执行。在这个方法中,我们可以处理它们并执行我们的逻辑。编写此方法的语法如下所示;
示例:
catch(function ($exp) { // exception can be handle here. })
Following are the examples given below:
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:
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:
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中文网其他相关文章!