为啥我的异步写入函数不运行?

Posted

技术标签:

【中文标题】为啥我的异步写入函数不运行?【英文标题】:Why doesn't my asynchronous write function run?为什么我的异步写入函数不运行? 【发布时间】:2020-06-18 22:09:19 【问题描述】:

好的,所以我一直在制作一个异步 IRC,它工作正常,除了一个问题。客户端可以写,服务器可以读。除了服务器不能写,客户端不能读。有什么帮助吗?

https://github.com/theprogrammer4568/IRC

        async public static Task Receive()
        
            while(true)
            
                Byte[] bytes = new Byte[256];

                int data = await Server.stream.ReadAsync(bytes, 0, bytes.Length);
                string message = System.Text.Encoding.ASCII.GetString(bytes, 0, data);

                Console.WriteLine(message);
            
        


        async public static Task Send()
        
            while(true)
            
                Byte[] bytes = new Byte[256];

                string message = Console.ReadLine();
                Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);

                await Server.stream.WriteAsync(data, 0, data.Length);
            
        

        async static Task Async()
        
            await Task.Run(Read.Receive);
            await Task.Run(Write.Send);
        

【问题讨论】:

请分享minimal reproducible example。 Bytes 变量的用途是什么? github.com/theprogrammer4568/IRC 很抱歉给您带来不便,我是 *** 的新手。但我已经更新了我的帖子。 【参考方案1】:

你的 Send 函数永远不会运行,因为你的 Receive 函数永远循环。

即使您使用Task.Run() 在不同的线程上运行它们,在运行Send 之前,您仍然是await 处理Receive 的结果。

【讨论】:

以上是关于为啥我的异步写入函数不运行?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个程序不异步运行?

boost::asio,为啥我的套接字在调用 async_receive_from 后立即运行回调函数?

为啥我不能将异步代码作为同步运行 [重复]

为啥我的循环中的异步委托没有等待

为啥我的 Windows 服务不会写入我的日志文件?

如何使用调度库运行异步函数?