Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Dotnety WriteAsync不工作,但WriteAndFlushAsync工作_C#_Networking - Fatal编程技术网

C# Dotnety WriteAsync不工作,但WriteAndFlushAsync工作

C# Dotnety WriteAsync不工作,但WriteAndFlushAsync工作,c#,networking,C#,Networking,我在一台服务器上工作,我正在利用DotNetty。服务器所做的是接收消息,检查消息头,然后调用正确的消息事件。除了一件事之外,这一切都有效 假设我有一个名为LoginMessageEvent的消息事件。在这里,您希望发送多个响应(=composer),如登录结果和客户端详细信息。所以我的想法是有一个这样的QueueComposer函数: public Task QueueComposer(Composer composer) { return _channel.WriteAsync(co

我在一台服务器上工作,我正在利用DotNetty。服务器所做的是接收消息,检查消息头,然后调用正确的消息事件。除了一件事之外,这一切都有效

假设我有一个名为
LoginMessageEvent
的消息事件。在这里,您希望发送多个响应(=composer),如登录结果和客户端详细信息。所以我的想法是有一个这样的QueueComposer函数:

public Task QueueComposer(Composer composer)
{
    return _channel.WriteAsync(composer);
}
public void Flush()
{
    _channel.Flush();
}
public async Task SendComposer(Composer composer)
{
    await _channel.WriteAndFlushAsync(composer);
}
并具有如下刷新功能:

public Task QueueComposer(Composer composer)
{
    return _channel.WriteAsync(composer);
}
public void Flush()
{
    _channel.Flush();
}
public async Task SendComposer(Composer composer)
{
    await _channel.WriteAndFlushAsync(composer);
}
(_通道=通道)

因此,在我的消息事件中,发送内容的部分需要:

public async Task Handle(Session session, Event message)
{
    Player player = await _playerController.Login(username, password);

    if (player != null)
    {
        await session.QueueComposer(LoginResult.Compose(true));
        await session.QueueComposer(ClientDetails.Compose(session));
        session.Flush();
    }
    else
    {
        await session.Disconnect();
    }
}
然而,这不会起任何作用。由于某些事件只发送一个响应,我还有一个函数,它将调用
WriteAndFlushAsync
,如下所示:

public Task QueueComposer(Composer composer)
{
    return _channel.WriteAsync(composer);
}
public void Flush()
{
    _channel.Flush();
}
public async Task SendComposer(Composer composer)
{
    await _channel.WriteAndFlushAsync(composer);
}
If我将在此中更改If语句中的代码:

await session.SendComposer(LoginResult.Compose(true));
await session.SendComposer(ClientDetails.Compose(session));
我的头脑认为这并不理想,所以我想知道为什么单独的
QueueComposer
Flush
不能工作