我刚开始使用异步和任务,我的代码已停止处理。当我有一个传入的网络数据包并且我尝试与数据包处理程序内的数据库进行通信时,就会发生这种情况。
public class ClientConnectedPacket : IClientPacket
{
private readonly EntityFactory _entityFactory;
public ClientConnectedPacket(EntityFactory entityFactory)
{
_entityFactory= entityFactory;
}
public async Task Handle(NetworkClient client, ClientPacketReader reader)
{
client.Entity = await _entityFactory.CreateInstanceAsync( reader.GetValueByKey("unique_device_id"));
// this Console.WriteLine never gets reached
Console.WriteLine($"Client [{reader.GetValueByKey("unique_device_id")}] has connected");
}
}
Run Code Online (Sandbox Code Playgroud)
从异步任务中调用 Handle 方法
if (_packetRepository.TryGetPacketByName(packetName, out var packet))
{
await packet.Handle(this, new ClientPacketReader(packetName, packetData));
}
else
{
Console.WriteLine("Unknown packet: " + packetName);
}
Run Code Online (Sandbox Code Playgroud)
这是我认为导致问题的方法
public async Task<Entity> CreateInstanceAsync(string uniqueId)
{
await using (var dbConnection = _databaseProvider.GetConnection())
{ …
Run Code Online (Sandbox Code Playgroud) 尝试使用可调用控制器,但似乎找不到 __invoke 方法?
Invalid route action: [App\Http\Controllers\App\Http\Controllers\MainController].
Run Code Online (Sandbox Code Playgroud)
它似乎在以下时间返回 true:
if (! method_exists($action, '__invoke')) {
throw new UnexpectedValueException("Invalid route action: [{$action}].");
}
Run Code Online (Sandbox Code Playgroud)
路线:
<?php
Route::get('/', \App\Http\Controllers\MainController::class);
Run Code Online (Sandbox Code Playgroud)
主控制器:
<?php
namespace App\Http\Controllers;
class MainController extends Controller
{
public function __invoke()
{
dd('main');
}
}
Run Code Online (Sandbox Code Playgroud)