【问题标题】:best way to call php laravel controller method in async manner以异步方式调用 php laravel 控制器方法的最佳方法
【发布时间】:2022-01-13 11:32:52
【问题描述】:

以异步方式调用 laravel 控制器操作的最佳方法是什么,因为它在 .net 中使用 async await 关键字非常容易。

这里是 .net 示例

public async Task<ViewResult> Index() { 
     return View(await GetThingsAsync());
}

在 laravel 中也可以用同样的方式吗?

PHP laravel 是否提供任何帮助程序或插件来帮助以异步方式调用控制器操作以及以异步方式调用所有 DB 查询 / eloquent 是否提供对异步查询的支持

【问题讨论】:

  • 这能回答你的问题吗? How to make function run in background in laravel
  • @Phil 不在后台。与 async await 在 .net 中的工作方式相同。就像我用 .net 示例更新了问题
  • 你知道你实际上在问什么吗? PHP 在 JVM 中没有 .NET 的异步编程模型或响应式流(类似模型),它大多是单线程的。虽然那些异步/反应模型对性能有好处,但如果您只是等待结果(通过await),那么尝试做类似的事情在 PHP 中没有任何好处;它根本没有这些功能。
  • 我天生就知道它是单线程的。但是有很多包在 PHP 中实现了多线程,比如她的 e 是一个dev.to/webong/using-asynchronous-processes-in-php-7io。我只想以我在 laravel 控制器中编写的异步方式调用所有数据库查询
  • “我只想以异步方式调用所有数据库查询”...为什么?如果您追求并行化(这与 .NET 的 async / await 非常不同),为什么不直接使用您链接的文章中的 spatie/async 库?

标签: php laravel asynchronous eloquent async-await


【解决方案1】:

@Phil 我在我的 laravel 项目解决方案中添加了一个 spatie/async 包,并像这样更改了我的控制器代码。

公共函数 indexAsync(请求 $request) { $results=null;

    $pool = Pool::create();

    $pool[] = async(function () {
    return Test::all();
     })->then(function ($output) {
    $this->results=$output;
    });

    await($pool);

    return view('test.index',['results' => $this->results]);

}

我得到了预期的结果。

它是按我的意愿工作还是无法在php中实现多线程

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多